After opening VS Code Remote Containers once, go to cat ~ / Library / Application \ Support / Code / storage.json
If you look at windowsState
> lastActiveWindow
> folder
, you can see that it looks like the following.
"windowsState": {
"lastActiveWindow": {
"folder": "vscode-remote://dev-container%2B2f557365722f6e616d652f646576656c6f702f70726f6a656374/usr/src",
"backupPath": "...",
"remoteAuthority": "dev-container+2f557365722f6e616d652f646576656c6f702f70726f6a656374",
"uiState": {
"mode": 1,
"x": 0,
"y": 23,
"width": 3440,
"height": 1417
}
},
"openedWindows": []
},
If you know the URL of this folder
$ code --folder-uri vscode-remote://dev-container%2B2f557365722f6e616d652f646576656c6f702f70726f6a656374/usr/src
It is possible to launch directly from the CLI in this way.
The part of 2f557365722f6e616d652f646576656c6f702f70726f6a656374
is hexadecimal string
.
Decoding this will result in / User / name / develop / project
. You can also see that it is URL-encoded because it contains % 2B
.
The final / usr / src
will be the path specified by workspaceFolder
in devcontainer.json
.
Based on these, as the whole URL component
"vscode-remote://" + URI.encode_www_form_component("dev-container+" + "/User/name/develop/project".unpack('H*')) + "/usr/src"
It seems that it is.
I will write a script that will generate a URL to start VS Code Remote Containers after specifying the path.
It is generated by reading workspaceFolder
of .devcontainer / devcontainer.json
under the specified path.
main.rb
# frozen_string_literal: true
# !/usr/bin/env ruby
require 'json'
module VSCodeRemoteContainer
class Utility
def initialize
end
def generate_url(root_path)
folder = find_workspace_folder(root_path)
path = "dev-container+#{root_path.unpack('H*')[0]}"
puts "vscode-remote://#{URI.encode_www_form_component(path)}#{folder}"
end
def find_workspace_folder(root_path)
unless File.exist?("#{root_path}/.devcontainer/devcontainer.json")
puts 'Not found devcontainer.json file.'
return
end
config = JSON.parse(File.read("#{root_path}/.devcontainer/devcontainer.json"))
config['workspaceFolder']
end
end
end
VSCodeRemoteContainer::Utility.new.generate_url(*ARGV)
Save the above as main.rb
and execute as below to generate the URL
$ ruby main.rb '/User/name/xxxx'
# => vscode-remote://dev-container%2B2f557365722f6e616d652f646576656c6f702f70726f6a656374/usr/src
This time, I created Workflows that work in combination with ghq. VS Code is started directly in the container by specifying the repository name as ↓ as an operation image.
I added it to the above script when creating Workflows.
module VSCodeRemoteContainer
class Utility
attr_accessor :bin_path
def initialize
@bin_path = ENV['GHQ_PATH'] || '/usr/local/bin'
end
def ghq_exists?
!`which #{@bin_path}/ghq`.empty?
end
def search
return unless ghq_exists?
result = []
`#{@bin_path}/ghq list --full-path`.split(/\R/).each do |d|
Dir.foreach(d) do |path|
next if ['.', '..'].include?(path)
file = File.join(d, path)
result << d if file.include?('.devcontainer')
end
end
result
end
end
end
What I'm doing is using ghq
to get a list of the target repositories and
I try to return only the repositories that have the .devcontainer
directory.
The finished product is https://gist.github.com/Slowhand0309/253bb296cd7acb089601d2b32da4723b I put it here. I just made it for the time being, so if you find any problems We would appreciate it if you could contact us.
zsh
, but if you can modify it with your shell as you like: pray:Recommended Posts