Sage-Bionetworks / sage-monorepo

Where OpenChallenges, Schematic, and other Sage open source apps are built
https://sage-bionetworks.github.io/sage-monorepo/
Apache License 2.0
21 stars 12 forks source link

[Docs] Document a reproducible way to login into GitHub from the devcontainer #2638

Closed tschaffter closed 2 months ago

tschaffter commented 2 months ago

What product(s) is this documentation issue for?

Sage Monorepo

Documentation issue

Description

I had this issue in the past and the solution was not very clear at the time. I'm now having another issue with the following setup:

  1. WSL (Windows) => EC2 (AmazonLinux2023) => Devcontainer (Ubuntu)

Is there a specific documentation page you are reporting?

No response

Anything else?

No response

Code of Conduct

tschaffter commented 2 months ago

I tried installing GCM on AL2023 but this OS is not supported, at least by the install script:

$ curl -L https://aka.ms/gcm/linux-install-source.sh | sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100  7233  100  7233    0     0  31600      0 --:--:-- --:--:-- --:--:-- 31600
This script will download, compile, and install Git Credential Manager to:

    /usr/local/bin

Git Credential Manager is licensed under the MIT License: https://aka.ms/gcm/license
ERROR: amzn is not officially supported by the GCM project.
See https://gh.io/gcm/linux for details.
tschaffter commented 2 months ago

Preview devcontainer (working)

On the host:

~/.gitconfig:

[user]
        email = thomas.schaffter@gmail.com
        name = Thomas Schaffter
[credential "https://github.com"]
        helper =
        helper = !/usr/bin/gh auth git-credential
[credential "https://gist.github.com"]
        helper =
        helper = !/usr/bin/gh auth git-credential

In the container:

~/.gitconfig:

[user]
        email = thomas.schaffter@gmail.com
        name = Thomas Schaffter
[credential "https://github.com"]
        helper = 
        helper = !/usr/bin/gh auth git-credential
[credential "https://gist.github.com"]
        helper = 
        helper = !/usr/bin/gh auth git-credential
[credential]
        helper = "!f() { /home/vscode/.vscode-server/bin/e170252f762678dec6ca2cc69aba1570769a5d39/node /tmp/vscode-remote-containers-bb7355d7-9d6c-4d02-aacf-c570382357d2.js git-credential-helper $*; }; f"

This comment mentions that VS Code is injecting the extra helper and copy the git configuration to the container. The git config is copied when the container is created.

tschaffter commented 2 months ago

Configure GitHub CLI as credential helper

Inside the devcontainer where the GH CLI is pre-installed:

$ gh auth login
$ gh auth setup-git

The content of ~/.gitconfig has been updated:

[credential]
        credentialStore = cache
        helper = "!f() { /home/vscode/.vscode-server/bin/e170252f762678dec6ca2cc69aba1570769a5d39/node /tmp/vscode-remote-containers-00eefd95-ad20-43f8-a57f-59253eeded22.js git-credential-helper $*; }; f"
[user]
        name = Thomas Schaffter
        email = thomas.schaffter@gmail.com
[credential "https://github.com"]
        helper = 
        helper = !/usr/bin/gh auth git-credential
[credential "https://gist.github.com"]
        helper = 
        helper = !/usr/bin/gh auth git-credential

I'm now able to push successfully to my fork.

tschaffter commented 1 month ago

I confirm that running the following two commands solve my problem, at least until I rebuild the dev container.

$ gh auth login
$ gh auth setup-git

A permanent solution to prevent the broken GitHub login popup to show up may be to update the VS Code config file to avoid VS Code from injecting the extra helper. This file being tracked with git, updating the config of the extra helper there would affect the environment of the other developers. If we do it, then we will need all to use the above two commands.

This https://github.com/microsoft/vscode-remote-release/issues/5500 mentions that VS Code is injecting the extra helper and copy the git configuration to the container. The git config is copied when the container is created.