func findCacheLocation()

in http-cache-action/proxy/proxy.go [109:146]


func findCacheLocation(key string) (string, error) {
	resource := fmt.Sprintf("cache?keys=%s&version=%s", key, calculateSHA256(key))
	requestUrl := getCacheApiUrl(resource)
	request, _ := http.NewRequest("GET", requestUrl, nil)
	request.Header.Set("Authorization", "Bearer "+token)
	request.Header.Set("User-Agent", "actions/cache")
	request.Header.Set("Accept", "application/json;api-version=6.0-preview.1")
	request.Header.Set("Accept-Charset", "utf-8")

	response, err := httpClient.Do(request)
	if err != nil {
		return "", err
	}
	if response.StatusCode == 404 {
		return "", nil
	}
	if response.StatusCode == 204 {
		// no content
		return "", nil
	}
	defer response.Body.Close()
	bodyBytes, err := ioutil.ReadAll(utfbom.SkipOnly(response.Body))
	if response.StatusCode >= 400 {
		log.Printf("Failed to download key %s: %d %s\n", key, response.StatusCode, string(bodyBytes))
		return "", fmt.Errorf("failed to get location: %d", response.StatusCode)
	}

	cacheResponse := GetCacheResponse{}
	err = json.NewDecoder(bytes.NewReader(bodyBytes)).Decode(&cacheResponse)
	if err != nil {
		log.Println(string(bodyBytes))
		return "", err
	}
	if cacheResponse.ArchiveLocation == "" {
		log.Println(string(bodyBytes))
	}
	return cacheResponse.ArchiveLocation, nil
}