exercism / v2-configlet

Tool to assist in managing Exercism language tracks.
MIT License
16 stars 23 forks source link

fetch-configlet - gzip: stdin: not in gzip format #173

Open amscotti opened 4 years ago

amscotti commented 4 years ago

I'm not really sure if this is an issue or just something I'm seeing due to something temporary or intermittent but when working on the Groovy track, when running fetch-configlet I'm getting this error,

gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now

I have seen this locally, (Mac OS, Ubuntu on WSL) along with on CI (Travis and GitHub Actions). If I keep running the build it will eventually pass without any errors from fetch-configlet.

Link to failing build on Travis

Looking into this a bit, it seems that the script is unable to get the version and is using the wrong URL to download from. One of the things I have tried is upgrading fetch-configlet to the latest version but I was still seeing this issue.

I can no longer reproduce this locally, so maybe it's something just intermittent but I do still see this popping up in CI.

Let me know if I can do anything to help by providing more information, it is kind of tricky because it is intermittent but I'll do my best with adding any more details that I can. This does seem related to #165, but that seems to be more about reporting the error then fixing it.

Thanks!

ErikSchierboom commented 4 years ago

I have had the same issue for the C# and F# tracks.

ErikSchierboom commented 4 years ago

This is a link to the failing build on GitHub actions: https://github.com/exercism/csharp/pull/1364/checks?check_run_id=465607250

nicuveo commented 4 years ago

Same problem on the Haskell track; I have two PRs that won't build (https://github.com/exercism/haskell/pull/896 and https://github.com/exercism/haskell/pull/897).

smuroff commented 4 years ago

The problem was here. CI build passed on cpp track.

nicuveo commented 4 years ago

This PR also proposes a fix that uses perl instead to make the check case insensitive: https://github.com/exercism/sml/pull/127.

JesseSingleton commented 4 years ago

Having this issue when trying to PR into the Javascript track.

pclausen commented 4 years ago

same issue on fortran track: https://github.com/exercism/fortran/issues/71

Cohen-Carlisle commented 4 years ago

The most robust way to fix this is to find the line in your CI doing:

VERSION="$(curl --head --silent $LATEST | awk -v FS=/ '/Location:/{print $NF}' | tr -d '\r')"

and replace /Location with toupper($0) ~ /LOCATION (or tolower($0) ~ /location) so that it looks like this:

VERSION="$(curl --head --silent $LATEST | awk -v FS=/ 'toupper($0) ~ /LOCATION:/{print $NF}' | tr -d '\r')" 

This is because HTTP headers are case insensitive according to their specification.

ErikSchierboom commented 4 years ago

@Cohen-Carlisle Actually, the underlying issue for this issue is that we're hitting rate limiting. So the best way to update is update to the latest version of the fetch-configlet file (https://github.com/exercism/configlet/blob/master/scripts/fetch-configlet). Coincidentally, the latest version does not use the header anymore but instead uses the GitHub API.

Note that the latest version is easy to integrate when using GitHub Actions for the CI (see this example), and we're working on Travis support.

Cohen-Carlisle commented 4 years ago

I'm not sure how out of date elixir's fetch-configlet was, but I can say with certainty that it was 100% broken due to the casing of the Location header. The file you linked is indeed a better solution, though, as it takes care of rate limiting and won't struggle with http headers' case insensitivity.

ErikSchierboom commented 4 years ago

Ah right, so you were bitten by a different bug then :)