Skip to content
Open
Show file tree
Hide file tree
Changes from 79 commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
7d41e66
Add local registry, auth, and push image
kvega005 Apr 6, 2026
638ebfa
Fix test
kvega005 Apr 6, 2026
7fd4026
delete cleanup registry storage
kvega005 Apr 6, 2026
1fdb1b2
Do not use volume
kvega005 Apr 6, 2026
15d30b6
Merge remote-tracking branch 'origin/feature/wsl-for-apps' into user/…
kvega005 Apr 6, 2026
35e6322
Undo entry point fix (getting checked in seperately)
kvega005 Apr 6, 2026
b278c0a
undo entry point fix
kvega005 Apr 6, 2026
b988783
Fix formatting
kvega005 Apr 6, 2026
783ae7b
Address copilot comment
kvega005 Apr 6, 2026
ead90fc
Use packaged wslc-registry
kvega005 Apr 6, 2026
ce78d51
Merge branch 'feature/wsl-for-apps' into user/kevinve/registry
kvega005 Apr 7, 2026
5156db5
Address copilot comments
kvega005 Apr 7, 2026
31b5ad5
Address more copilot comments
kvega005 Apr 7, 2026
4cfd98c
Merge branch 'user/kevinve/registry' of https://github.com/kvega005/W…
kvega005 Apr 7, 2026
6305c58
Fix push and Pulll tests
kvega005 Apr 7, 2026
22cb648
Fix formatting
kvega005 Apr 7, 2026
3a0ba44
Merge branch 'feature/wsl-for-apps' into user/kevinve/registry
kvega005 Apr 7, 2026
83b39f2
Address suggestion
kvega005 Apr 7, 2026
a17819e
Address suggestions
kvega005 Apr 7, 2026
ba6c3de
Merge branch 'user/kevinve/registry' of https://github.com/kvega005/W…
kvega005 Apr 7, 2026
e329ac7
address suggestions
kvega005 Apr 7, 2026
868f69e
Merge branch 'feature/wsl-for-apps' into user/kevinve/registry
kvega005 Apr 7, 2026
3256f5d
Address copilot comments
kvega005 Apr 7, 2026
2d4dce9
Merge branch 'user/kevinve/registry' of https://github.com/kvega005/W…
kvega005 Apr 7, 2026
9177765
Remove wslc local registry
kvega005 Apr 7, 2026
0fa5505
formatting fix
kvega005 Apr 7, 2026
7b41634
Add script and docker file to generate test images.
kvega005 Apr 7, 2026
aaed20e
Address base64 encode feedback
kvega005 Apr 7, 2026
65aed10
Add Auth to SDK
kvega005 Apr 7, 2026
adab0ce
remove unneeded code
kvega005 Apr 7, 2026
3d0bad5
Address custom headers suggestion
kvega005 Apr 7, 2026
10491ee
Make regitsry auth required
kvega005 Apr 7, 2026
404a05e
Nit update script
kvega005 Apr 7, 2026
965f832
Merge branch 'feature/wsl-for-apps' into user/kevinve/registry
kvega005 Apr 7, 2026
2f35e77
Fix formatting
kvega005 Apr 8, 2026
71081bb
Update comment
kvega005 Apr 8, 2026
1734d51
Merge branch 'feature/wsl-for-apps' into user/kevinve/registry
kvega005 Apr 8, 2026
a40b27d
Fix tests
kvega005 Apr 8, 2026
bc989e5
Merge remote-tracking branch 'origin/feature/wsl-for-apps' into user/…
kvega005 Apr 8, 2026
7f59f8f
Merge branch 'feature/wsl-for-apps' into user/kevinve/registry
kvega005 Apr 8, 2026
d1455e0
Merge branch 'user/kevinve/registry' of https://github.com/kvega005/W…
kvega005 Apr 8, 2026
ef6f192
Fix tests
kvega005 Apr 8, 2026
d14cfec
Added back removed test + cleanup
kvega005 Apr 9, 2026
f4c1f39
Merge remote-tracking branch 'origin/feature/wsl-for-apps' into user/…
kvega005 Apr 9, 2026
c945517
Fix empty auth
kvega005 Apr 9, 2026
498588b
Merge branch 'feature/wsl-for-apps' into user/kevinve/registry
kvega005 Apr 9, 2026
baabcd9
Fix clang-format violations in test files
Apr 9, 2026
e944f0c
implement wslc login
kvega005 Apr 10, 2026
4eb4ed0
Merge remote-tracking branch 'origin/feature/wsl-for-apps' into user/…
kvega005 Apr 13, 2026
1f07291
Fix bad merge
kvega005 Apr 13, 2026
2a480dd
Fix another bad merge issues
kvega005 Apr 13, 2026
26ce250
Merge remote-tracking branch 'origin/feature/wsl-for-apps' into user/…
kvega005 Apr 13, 2026
5b8c26f
Fix session name not found
kvega005 Apr 13, 2026
f921914
add wslc cred prefix
kvega005 Apr 13, 2026
04238d5
add wslc cred prefix
kvega005 Apr 13, 2026
2c8c161
Update test/windows/wslc/e2e/WSLCE2EHelpers.cpp
kvega005 Apr 13, 2026
c254dad
Address copilot comments
kvega005 Apr 14, 2026
6428b91
Address feedback and cleanup
kvega005 Apr 14, 2026
100ca14
Update localization comments
kvega005 Apr 14, 2026
b83877d
Merge branch 'feature/wsl-for-apps' into user/kevinve/wslc-login
kvega005 Apr 14, 2026
83c243c
Address feedback
kvega005 Apr 14, 2026
3aca683
Fix formatting
kvega005 Apr 14, 2026
379ef46
ADdress copilot suggestions
kvega005 Apr 14, 2026
3acc79b
Merge branch 'feature/wsl-for-apps' into user/kevinve/wslc-login
kvega005 Apr 14, 2026
3c599b7
fix formatting
kvega005 Apr 14, 2026
b8f28f0
Fix ordering
kvega005 Apr 14, 2026
7430e01
Merge branch 'feature/wsl-for-apps' into user/kevinve/wslc-login
kvega005 Apr 14, 2026
0235839
Try different port
kvega005 Apr 15, 2026
d516f50
Fix formatting
kvega005 Apr 15, 2026
ae72ade
Cherry-pick PR #14244 (squashed) - upstream microsoft/WSL#14244
kvega005 Apr 15, 2026
4f51c37
Use default registry port
kvega005 Apr 15, 2026
9a80823
Revert "Cherry-pick PR #14244 (squashed) - upstream microsoft/WSL#14244"
kvega005 Apr 15, 2026
becc631
Merge branch 'feature/wsl-for-apps' into user/kevinve/wslc-login
kvega005 Apr 15, 2026
38d8556
Address feedback
kvega005 Apr 15, 2026
e1afb4c
Merge branch 'user/kevinve/wslc-login' of https://github.com/kvega005…
kvega005 Apr 15, 2026
609bd82
Remove unnecessary code
kvega005 Apr 15, 2026
132687a
fix formatting
kvega005 Apr 15, 2026
dd19ee2
Address copilot feedback
kvega005 Apr 15, 2026
618aab9
fix formatting
kvega005 Apr 15, 2026
1ef5fe2
Improve credential key parsng
kvega005 Apr 15, 2026
8ba43af
Try a new port number
kvega005 Apr 15, 2026
5b2ed43
Address feedback
kvega005 Apr 15, 2026
f165880
Merge branch 'feature/wsl-for-apps' into user/kevinve/wslc-login
kvega005 Apr 15, 2026
819d2a2
Address copilot
kvega005 Apr 15, 2026
43ca5b0
Merge branch 'user/kevinve/wslc-login' of https://github.com/kvega005…
kvega005 Apr 15, 2026
3a2f454
TEMP: Cherry-pick PR #14244 crash dump handler (to be reverted)
kvega005 Apr 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions localization/strings/en-US/Resources.resw
Original file line number Diff line number Diff line change
Expand Up @@ -2281,6 +2281,12 @@ For privacy information about this product please visit https://aka.ms/privacy.<
<data name="WSLCCLI_ImagePullLongDesc" xml:space="preserve">
<value>Pulls images.</value>
</data>
<data name="WSLCCLI_ImagePushDesc" xml:space="preserve">
<value>Upload an image to a registry.</value>
</data>
<data name="WSLCCLI_ImagePushLongDesc" xml:space="preserve">
<value>Upload an image to a registry.</value>
</data>
<data name="WSLCCLI_ImageRemoveDesc" xml:space="preserve">
<value>Remove images.</value>
</data>
Expand All @@ -2293,6 +2299,67 @@ For privacy information about this product please visit https://aka.ms/privacy.<
<data name="WSLCCLI_ImageSaveLongDesc" xml:space="preserve">
<value>Saves images.</value>
</data>
<data name="WSLCCLI_LoginDesc" xml:space="preserve">
<value>Log in to a registry.</value>
</data>
<data name="WSLCCLI_LoginLongDesc" xml:space="preserve">
<value>Log in to a registry. If no server is specified, the default is defined by the session.</value>
</data>
Comment thread
kvega005 marked this conversation as resolved.
<data name="WSLCCLI_LogoutDesc" xml:space="preserve">
<value>Log out from a registry.</value>
</data>
<data name="WSLCCLI_LogoutLongDesc" xml:space="preserve">
<value>Log out from a registry. If no server is specified, the default is defined by the session.</value>
Comment thread
kvega005 marked this conversation as resolved.
Comment thread
kvega005 marked this conversation as resolved.
Comment thread
kvega005 marked this conversation as resolved.
</data>
Comment thread
kvega005 marked this conversation as resolved.
<data name="WSLCCLI_LoginSucceeded" xml:space="preserve">
<value>Login Succeeded</value>
</data>
<data name="WSLCCLI_LogoutSucceeded" xml:space="preserve">
<value>Removing login credentials for {}</value>
<comment>{FixedPlaceholder="{}"}Command line arguments, file names and string inserts should not be translated</comment>
</data>
<data name="WSLCCLI_LogoutNotFound" xml:space="preserve">
<value>Not logged in to {}</value>
<comment>{FixedPlaceholder="{}"}Command line arguments, file names and string inserts should not be translated</comment>
</data>
<data name="WSLCCLI_CredentialFileCorrupt" xml:space="preserve">
<value>Failed to parse credentials file '{}': the file may be corrupted.</value>
<comment>{FixedPlaceholder="{}"}Command line arguments, file names and string inserts should not be translated</comment>
</data>
<data name="WSLCCLI_LoginServerArgDescription" xml:space="preserve">
<value>Server</value>
</data>
<data name="WSLCCLI_LoginUsernameArgDescription" xml:space="preserve">
<value>Username</value>
</data>
<data name="WSLCCLI_LoginPasswordArgDescription" xml:space="preserve">
<value>Password or Personal Access Token (PAT)</value>
<comment>{Locked="PAT"}Acronym should not be translated</comment>
</data>
<data name="WSLCCLI_LoginPasswordStdinArgDescription" xml:space="preserve">
<value>Take the Password or Personal Access Token (PAT) from stdin</value>
<comment>{Locked="PAT"}{Locked="stdin"}Technical terms should not be translated</comment>
</data>
<data name="WSLCCLI_LoginPasswordAndStdinMutuallyExclusive" xml:space="preserve">
<value>--password and --password-stdin are mutually exclusive</value>
<comment>{Locked="--password "}{Locked="--password-stdin "}Command line arguments, file names and string inserts should not be translated</comment>
</data>
<data name="WSLCCLI_LoginPasswordStdinRequiresUsername" xml:space="preserve">
<value>Must provide --username with --password-stdin</value>
<comment>{Locked="--username "}{Locked="--password-stdin"}Command line arguments, file names and string inserts should not be translated</comment>
</data>
<data name="WSLCCLI_LoginUsernamePrompt" xml:space="preserve">
<value>Username: </value>
</data>
<data name="WSLCCLI_LoginPasswordPrompt" xml:space="preserve">
<value>Password: </value>
</data>
<data name="WSLCCLI_RegistryCommandDesc" xml:space="preserve">
<value>Manage registry credentials.</value>
</data>
<data name="WSLCCLI_RegistryCommandLongDesc" xml:space="preserve">
<value>Manage registry credentials, including logging in and out of container registries.</value>
</data>
<data name="WSLCCLI_ImageTagDesc" xml:space="preserve">
<value>Tag an image.</value>
</data>
Expand Down
2 changes: 1 addition & 1 deletion src/windows/WslcSDK/wslcsdk.h
Original file line number Diff line number Diff line change
Expand Up @@ -564,4 +564,4 @@ typedef __callback void(CALLBACK* WslcInstallCallback)(_In_ WslcComponentFlags c

STDAPI WslcInstallWithDependencies(_In_opt_ WslcInstallCallback progressCallback, _In_opt_ PVOID context);

EXTERN_C_END
EXTERN_C_END
1 change: 0 additions & 1 deletion src/windows/common/WSLCContainerLauncher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ Module Name:
This file contains the implementation for WSLCContainerLauncher.
--*/

#include "precomp.h"
#include "WSLCContainerLauncher.h"

Expand Down
19 changes: 18 additions & 1 deletion src/windows/common/WSLCUserSettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,10 @@ static constexpr std::string_view s_DefaultSettingsTemplate =
" # Default path for session storage. By default, storage is per-session under:\n"
" # %LocalAppData%\\wslc\\sessions\\wslc-cli (standard sessions)\n"
" # %LocalAppData%\\wslc\\sessions\\wslc-cli-admin (elevated sessions)\n"
" # defaultStoragePath: \"\"\n";
" # defaultStoragePath: \"\"\n"
"\n"
"# Credential storage backend: \"wincred\" or \"file\" (default: wincred)\n"
"# credentialStore: wincred\n";

// Validate individual setting specializations
namespace details {
Expand Down Expand Up @@ -123,6 +126,20 @@ namespace details {
return value;
}

WSLC_VALIDATE_SETTING(CredentialStore)
{
if (value == "wincred")
{
return CredentialStoreType::WinCred;
}
if (value == "file")
{
return CredentialStoreType::File;
}

return std::nullopt;
}

#undef WSLC_VALIDATE_SETTING

} // namespace details
Expand Down
8 changes: 8 additions & 0 deletions src/windows/common/WSLCUserSettings.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ enum class Setting : size_t
SessionNetworkingMode,
SessionHostFileShareMode,
SessionDnsTunneling,
CredentialStore,

Max
};
Expand All @@ -52,6 +53,12 @@ enum class HostFileShareMode
VirtioFs
};

enum class CredentialStoreType
{
WinCred,
File
};

namespace details {

template <Setting S>
Expand Down Expand Up @@ -83,6 +90,7 @@ namespace details {
DEFINE_SETTING_MAPPING(SessionNetworkingMode, std::string, WSLCNetworkingMode, WSLCNetworkingModeVirtioProxy, "session.networkingMode")
DEFINE_SETTING_MAPPING(SessionHostFileShareMode, std::string, HostFileShareMode, HostFileShareMode::VirtioFs, "session.hostFileShareMode")
DEFINE_SETTING_MAPPING(SessionDnsTunneling, bool, bool, true, "session.dnsTunneling")
DEFINE_SETTING_MAPPING(CredentialStore, std::string, CredentialStoreType, CredentialStoreType::WinCred, "credentialStore")

#undef DEFINE_SETTING_MAPPING
// clang-format on
Expand Down
5 changes: 4 additions & 1 deletion src/windows/wslc/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,10 @@ target_include_directories(wslclib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${WSLC_SUB
target_link_libraries(wslclib
${COMMON_LINK_LIBRARIES}
yaml-cpp
common)
common
advapi32
crypt32)


target_precompile_headers(wslclib REUSE_FROM common)
set_target_properties(wslclib PROPERTIES FOLDER windows)
Expand Down
4 changes: 4 additions & 0 deletions src/windows/wslc/arguments/ArgumentDefinitions.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,13 +64,16 @@ _(NoCache, "no-cache", NO_ALIAS, Kind::Flag, L
_(NoPrune, "no-prune", NO_ALIAS, Kind::Flag, Localization::WSLCCLI_NoPruneArgDescription()) \
_(NoTrunc, "no-trunc", NO_ALIAS, Kind::Flag, Localization::WSLCCLI_NoTruncArgDescription()) \
_(Output, "output", L"o", Kind::Value, Localization::WSLCCLI_OutputArgDescription()) \
_(Password, "password", L"p", Kind::Value, Localization::WSLCCLI_LoginPasswordArgDescription()) \
Comment thread
kvega005 marked this conversation as resolved.
Comment thread
kvega005 marked this conversation as resolved.
_(PasswordStdin, "password-stdin", NO_ALIAS, Kind::Flag, Localization::WSLCCLI_LoginPasswordStdinArgDescription()) \
_(Path, "path", NO_ALIAS, Kind::Positional, Localization::WSLCCLI_PathArgDescription()) \
/*_(Progress, "progress", NO_ALIAS, Kind::Value, Localization::WSLCCLI_ProgressArgDescription())*/ \
_(Publish, "publish", L"p", Kind::Value, Localization::WSLCCLI_PublishArgDescription()) \
Comment thread
kvega005 marked this conversation as resolved.
Comment thread
kvega005 marked this conversation as resolved.
Comment thread
kvega005 marked this conversation as resolved.
/*_(Pull, "pull", NO_ALIAS, Kind::Value, Localization::WSLCCLI_PullArgDescription())*/ \
_(Quiet, "quiet", L"q", Kind::Flag, Localization::WSLCCLI_QuietArgDescription()) \
_(Remove, "rm", NO_ALIAS, Kind::Flag, Localization::WSLCCLI_RemoveArgDescription()) \
/*_(Scheme, "scheme", NO_ALIAS, Kind::Value, Localization::WSLCCLI_SchemeArgDescription())*/ \
_(Server, "server", NO_ALIAS, Kind::Positional, Localization::WSLCCLI_LoginServerArgDescription()) \
_(Session, "session", NO_ALIAS, Kind::Value, Localization::WSLCCLI_SessionIdArgDescription()) \
_(SessionId, "session-id", NO_ALIAS, Kind::Positional, Localization::WSLCCLI_SessionIdPositionalArgDescription()) \
_(StoragePath, "storage-path", NO_ALIAS, Kind::Positional, L"Path to the session storage directory") \
Expand All @@ -82,6 +85,7 @@ _(Time, "time", L"t", Kind::Value, L
_(TMPFS, "tmpfs", NO_ALIAS, Kind::Value, Localization::WSLCCLI_TMPFSArgDescription()) \
_(TTY, "tty", L"t", Kind::Flag, Localization::WSLCCLI_TTYArgDescription()) \
_(User, "user", L"u", Kind::Value, Localization::WSLCCLI_UserArgDescription()) \
_(Username, "username", L"u", Kind::Value, Localization::WSLCCLI_LoginUsernameArgDescription()) \
Comment thread
kvega005 marked this conversation as resolved.
Comment thread
kvega005 marked this conversation as resolved.
_(Verbose, "verbose", NO_ALIAS, Kind::Flag, Localization::WSLCCLI_VerboseArgDescription()) \
_(Version, "version", L"v", Kind::Flag, Localization::WSLCCLI_VersionArgDescription()) \
/*_(Virtual, "virtualization", NO_ALIAS, Kind::Value, Localization::WSLCCLI_VirtualArgDescription())*/ \
Expand Down
1 change: 1 addition & 0 deletions src/windows/wslc/commands/ImageCommand.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ std::vector<std::unique_ptr<Command>> ImageCommand::GetCommands() const
commands.push_back(std::make_unique<ImageListCommand>(FullName()));
commands.push_back(std::make_unique<ImageLoadCommand>(FullName()));
commands.push_back(std::make_unique<ImagePullCommand>(FullName()));
commands.push_back(std::make_unique<ImagePushCommand>(FullName()));
commands.push_back(std::make_unique<ImageSaveCommand>(FullName()));
commands.push_back(std::make_unique<ImageTagCommand>(FullName()));
return commands;
Expand Down
15 changes: 15 additions & 0 deletions src/windows/wslc/commands/ImageCommand.h
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,21 @@ struct ImagePullCommand final : public Command
void ExecuteInternal(CLIExecutionContext& context) const override;
};

// Push Command
struct ImagePushCommand final : public Command
{
constexpr static std::wstring_view CommandName = L"push";
ImagePushCommand(const std::wstring& parent) : Command(CommandName, parent)
{
}
std::vector<Argument> GetArguments() const override;
std::wstring ShortDescription() const override;
std::wstring LongDescription() const override;

protected:
void ExecuteInternal(CLIExecutionContext& context) const override;
};

// Save Command
struct ImageSaveCommand final : public Command
{
Expand Down
51 changes: 51 additions & 0 deletions src/windows/wslc/commands/ImagePushCommand.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
/*++

Copyright (c) Microsoft. All rights reserved.

Module Name:

ImagePushCommand.cpp

Abstract:

Implementation of the image push command.

--*/

#include "ImageCommand.h"
#include "CLIExecutionContext.h"
#include "ImageTasks.h"
#include "SessionTasks.h"
#include "Task.h"

using namespace wsl::windows::wslc::execution;
using namespace wsl::windows::wslc::task;
using namespace wsl::shared;

namespace wsl::windows::wslc {
// Image Push Command
std::vector<Argument> ImagePushCommand::GetArguments() const
{
return {
Argument::Create(ArgType::ImageId, true),
Argument::Create(ArgType::Session),
};
}

std::wstring ImagePushCommand::ShortDescription() const
{
return Localization::WSLCCLI_ImagePushDesc();
}

std::wstring ImagePushCommand::LongDescription() const
{
return Localization::WSLCCLI_ImagePushLongDesc();
}

void ImagePushCommand::ExecuteInternal(CLIExecutionContext& context) const
{
context //
<< CreateSession //
<< PushImage;
}
} // namespace wsl::windows::wslc
Loading