Merge pull request 'development_dockername' (#5) from development_dockername into main
Reviewed-on: #5
This commit is contained in:
commit
b7669954d6
67
flist.v
67
flist.v
@ -2,6 +2,7 @@ import os
|
|||||||
import net.http
|
import net.http
|
||||||
import term
|
import term
|
||||||
import json
|
import json
|
||||||
|
import x.json2
|
||||||
|
|
||||||
const (
|
const (
|
||||||
token_file = os.join_path(os.home_dir(), '.config', 'tfhubtoken')
|
token_file = os.join_path(os.home_dir(), '.config', 'tfhubtoken')
|
||||||
@ -122,14 +123,72 @@ fn logout() {
|
|||||||
success_message('You are now logged out of Docker Hub and your Flist Hub token has been removed.')
|
success_message('You are now logged out of Docker Hub and your Flist Hub token has been removed.')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_docker_credential() !string {
|
||||||
|
// Try to get the Docker credential automatically
|
||||||
|
credential := get_docker_credential_auto() or {
|
||||||
|
// If automatic retrieval fails, prompt the user for input
|
||||||
|
println(term.yellow('\nCouldn\'t find your Docker username automatically.'))
|
||||||
|
username := os.input('Please enter your Docker username and press ENTER: ')
|
||||||
|
if username.trim_space() == '' {
|
||||||
|
return error('No Docker username provided')
|
||||||
|
}
|
||||||
|
return username.trim_space()
|
||||||
|
}
|
||||||
|
return credential
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_docker_credential_auto() !string {
|
||||||
|
// First, try to get the Docker username using the system info command
|
||||||
|
system_info_result := os.execute('sudo docker system info | grep \'Username\' | cut -d \' \' -f 3')
|
||||||
|
if system_info_result.exit_code == 0 && system_info_result.output.trim_space() != '' {
|
||||||
|
return system_info_result.output.trim_space()
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the above method fails, proceed with the current method
|
||||||
|
// Read the Docker config file
|
||||||
|
config_path := os.join_path(os.home_dir(), '.docker', 'config.json')
|
||||||
|
config_content := os.read_file(config_path) or {
|
||||||
|
return error('Failed to read Docker config file: $err')
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parse the JSON content
|
||||||
|
config := json2.raw_decode(config_content) or {
|
||||||
|
return error('Failed to parse Docker config: $err')
|
||||||
|
}
|
||||||
|
|
||||||
|
// Extract the credsStore value
|
||||||
|
creds_store := config.as_map()['credsStore'] or {
|
||||||
|
return error('credsStore not found in Docker config')
|
||||||
|
}.str()
|
||||||
|
|
||||||
|
// Execute the docker-credential command
|
||||||
|
cred_helper := 'docker-credential-$creds_store'
|
||||||
|
cred_output := os.execute('$cred_helper list')
|
||||||
|
if cred_output.exit_code != 0 {
|
||||||
|
return error('Failed to execute $cred_helper: ${cred_output.output}')
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parse the credential list
|
||||||
|
cred_list := json2.raw_decode(cred_output.output) or {
|
||||||
|
return error('Failed to parse credential list: $err')
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find the first docker.io entry
|
||||||
|
for key, value in cred_list.as_map() {
|
||||||
|
if key.contains('docker.io') {
|
||||||
|
return value.str()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return error('No docker.io credential found')
|
||||||
|
}
|
||||||
|
|
||||||
fn push(tag string) {
|
fn push(tag string) {
|
||||||
docker_user_result := os.execute('docker-credential-$(jq -r .credsStore ~/.docker/config.json) list | jq -r \'. | to_entries[] | select(.key | contains("docker.io")) | last(.value)\' | head -n 1')
|
docker_user := get_docker_credential() or {
|
||||||
if docker_user_result.exit_code != 0 || docker_user_result.output.trim_space() == '' {
|
error_message('Failed to get Docker username: $err')
|
||||||
error_message('Failed to get Docker username.')
|
|
||||||
exit(1)
|
exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
docker_user := docker_user_result.output.trim_space()
|
|
||||||
info_message('Docker username: $docker_user')
|
info_message('Docker username: $docker_user')
|
||||||
|
|
||||||
full_tag := '${docker_user}/${tag}'
|
full_tag := '${docker_user}/${tag}'
|
||||||
|
Loading…
Reference in New Issue
Block a user