Created
March 18, 2021 10:04
-
-
Save vdayanand/05f01dea350b1c8223a3edde9eac073a to your computer and use it in GitHub Desktop.
Make JuliaHub auth token available to Pkg.jl via environment variable
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#= | |
Make JuliaHub auth token available to Pkg.jl via environment variable | |
Usage: | |
1. print encoded token: `julia -e 'include("tokenmanager.jl"); encode_token("<Absolute path of token file>")'` | |
2. Set PkgServer in enviroment variable `JULIA_PKG_SERVER` | |
3. Set the encoded token string in `JULIA_TOKEN_ENCODED` | |
4. Place the token in current depot: `julia -e 'include("tokenmanager.jl"); store_token()'` | |
=# | |
using Pkg | |
using Base64 | |
function encode_token(tokenfile::String) | |
println(Base64.base64encode(read(tokenfile, String))) | |
end | |
function get_pkg_server_directory(server) | |
m = match(r"^\w+://([^\\/]+)(?:$|/)", server) | |
if m === nothing | |
error("malformed Pkg server value $server") | |
end | |
joinpath(Pkg.depots1(), "servers", String(m.captures[1])) | |
end | |
function store_token() | |
tokenstr = get(ENV, "JULIA_TOKEN_ENCODED", "") | |
if isempty(tokenstr) | |
@error "No token configured" | |
return | |
end | |
server = Pkg.pkg_server() | |
if isempty(server) | |
@error "Pkg Server not configured" | |
return | |
end | |
server_dir = get_pkg_server_directory(server) | |
isdir(server_dir) || mkpath(server_dir) | |
decoded_tokenstr = try | |
String(Base64.base64decode(tokenstr)) | |
catch ex | |
@error "Unable to decode encodeded token" ex | |
return | |
end | |
try | |
Pkg.TOML.parse(decoded_tokenstr) | |
catch ex | |
@error "Unable to parse token" ex | |
return | |
end | |
tokenfile = joinpath(server_dir, "auth.toml") | |
open(tokenfile, "w") do f | |
write(f, decoded_tokenstr) | |
end | |
@info "Token stored at" tokenfile | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment