exercism / cli

A Go based command line tool for exercism.org.
https://exercism.org/docs/using/solving-exercises/working-locally
MIT License
1.34k stars 361 forks source link

Configuring exercism on MacOS seems broken #971

Open niloct opened 3 years ago

niloct commented 3 years ago

I'm on MacOs Mojave, and things used to work months ago when I was using this cli.

Now, it seems that, when you set an workspace, and execute exercism troubleshoot, it only recognizes the token when you are in the directory that you issued the exercism configure command. See:

~ $  exercism configure --token=*************** --workspace=/Users/teixeira/Exercism

You have configured the Exercism command-line client:

Config dir:                       ~/.config/exercism
Token:         (-t, --token)      ***********
Workspace:     (-w, --workspace)  /Users/teixeira/Exercism
API Base URL:  (-a, --api)        https://api.exercism.io/v1
~ $ exercism troubleshoot

Troubleshooting Information
===========================

Version
----------------
Current: 3.0.13
Latest:  3.0.13

Operating System
----------------
OS:           darwin
Architecture: amd64

Configuration
----------------
Home:      /Users/teixeira
Workspace: /Users/teixeira/Exercism
Config:    ~/.config/exercism
API key:   4358*****************************657

API Reachability
----------------

GitHub:
    * https://api.github.com
    * [connected]
    * 155.35934ms

Exercism:
    * https://api.exercism.io/v1/ping
    * [connected]
    * 1.224142255s

If you are having trouble please file a GitHub issue at
https://github.com/exercism/exercism.io/issues and include
this information.

So token was recognized ok. Now if I cd into a subdir:

~ $ cd Exercism/python/
~/Exercism/python $ ls
acronym  grade-school  hello-world  isogram      luhn      matrix     scrabble-score     twelve-days  word-count
clock    hamming       high-scores  kindergarten-garden  markdown  raindrops  teste_markdown.py  two-fer
~/Exercism/python $ exercism troubleshoot

Troubleshooting Information
===========================

Version
----------------
Current: 3.0.13
Latest:  3.0.13

Operating System
----------------
OS:           darwin
Architecture: amd64

Configuration
----------------
Home:      /Users/teixeira
Workspace: /Users/teixeira/Exercism (default)
Config:    ~/.config/exercism
API key:   <not configured>
Find your API key at https://exercism.io/my/settings

API Reachability
----------------

GitHub:
    * https://api.github.com
    * [connected]
    * 148.12741ms

Exercism:
    * https://api.exercism.io/v1/ping
    * [connected]
    * 1.101968641s

If you are having trouble please file a GitHub issue at
https://github.com/exercism/exercism.io/issues and include
this information.

Not configured!

The workaround is to call exercism configure inside EVERY single challenge directory, so it creates a ~/.config structure and recognizes the token, but this is broken and didn't work like that before.....

Thanks for your attention.

niloct commented 3 years ago

Well I've figured the parts out.

TL;DR: you have to set an environment variable called EXERCISM_CONFIG_HOME to value ~/.config/exercism before you use the exercism configure command.

In the end it doesn't matter if you have or not an existing workspace.

As said above, to fix this you have to define an environment variable with an appropriate value. Then exercism recognizes your token no matter in which directory you use exercism.

If you don't do this, there is a current behavior which seems a bug: it creates a ~/.config/exercism directory inside the current directory in which you called exercism configure.

So this leads to DOZENS of replications of the configuration directory, placed on each challenge directory every time you need to interact with the API. Let's see:


First we destroy the env variable and configuration dir previously set here

~ $ export
[...]
declare -x EXERCISM_CONFIG_HOME="/Users/teixeira/.config/exercism/"
~ $ unset EXERCISM_CONFIG_HOME
~ $ rm -rf ~/.config/exercism/
~ $ cd '~'
-bash: cd: ~: No such file or directory

(There is no extraneous '~' directory inside our home directory)

Then we "configure" exercism

~ $ exercism configure --token 435****************7 --workspace=/Users/teixeira/Exercism/

You have configured the Exercism command-line client:

Config dir:                       ~/.config/exercism
Token:         (-t, --token)      435****************7
Workspace:     (-w, --workspace)  /Users/teixeira/Exercism
API Base URL:  (-a, --api)        https://api.exercism.io/v1

Now the bad behavior: it created a whole nested duplicated structure inside our home directory

~ $ cd '~'
~/~ $ find .
.
./.config
./.config/exercism
./.config/exercism/user.json

Let's delete this structure, create the environment variable, and resolve

~ $ rm -rf '~'
~ $ export EXERCISM_CONFIG_HOME=~/.config/exercism

Then we configure exercism exactly like before (above)

Then it works!

~ $ cd .config/exercism/
~/.config/exercism $ find .
.
./user.json
~/.config/exercism $ exercism troubleshoot

Troubleshooting Information
===========================

Version
----------------
Current: 3.0.13
Latest:  3.0.13

Operating System
----------------
OS:           darwin
Architecture: amd64

Configuration
----------------
Home:      /Users/teixeira
Workspace: /Users/teixeira/Exercism
Config:    /Users/teixeira/.config/exercism
API key:   4358*****************************657

API Reachability
----------------

GitHub:
    * https://api.github.com
    * [connected]
    * 174.561378ms

Exercism:
    * https://api.exercism.io/v1/ping
    * [connected]
    * 1.055849818s

If you are having trouble please file a GitHub issue at
https://github.com/exercism/exercism.io/issues and include
this information.