async fn extract_versions(
        &self,
        compiler: CompilerGitHubRelease,
    ) -> anyhow::Result<HashMap<String, reqwest::Url>> {
        // Create a stream over all the versions to not worry about pagination.
        let releases = self
            .client
            .repos(compiler.organization(), compiler.repo())
            .releases()
            .list()
            .per_page(100)
            .send()
            .await?
            .into_stream(&self.client);
        tokio::pin!(releases);

        // Go through all the releases, filter ones that match the version.
        // For matching versions, find a suitable asset and store its URL.
        let mut versions = HashMap::new();
        while let Some(release) = releases.try_next().await? {
            // Skip pre-releases.
            if release.prerelease {
                continue;
            }

            if let Some(version) = compiler.extract_version(&release.tag_name) {
                if compiler.is_version_blacklisted(&version) {
                    tracing::debug!("Skipping {compiler:?}:{version} due to blacklist");
                    continue;
                }

                let mut found = false;
                for asset in release.assets {
                    if compiler.match_asset(asset.browser_download_url.as_str()) {
                        tracing::info!("Discovered release {compiler:?}:{version}");
                        versions.insert(version.clone(), asset.browser_download_url.clone());
                        found = true;
                        break;
                    }
                }
                if !found {
                    tracing::warn!("Didn't find a matching artifact for {compiler:?}:{version}");
                }
            }
        }

        Ok(versions)
    }
Will scan all the releases for a specific compiler.
core/lib/contract_verifier/src/resolver/github/gh_api.rs