Shift.Core.Sdk
1.0.3
See the version list below for details.
dotnet add package Shift.Core.Sdk --version 1.0.3
NuGet\Install-Package Shift.Core.Sdk -Version 1.0.3
<PackageReference Include="Shift.Core.Sdk" Version="1.0.3" />
paket add Shift.Core.Sdk --version 1.0.3
#r "nuget: Shift.Core.Sdk, 1.0.3"
// Install Shift.Core.Sdk as a Cake Addin #addin nuget:?package=Shift.Core.Sdk&version=1.0.3 // Install Shift.Core.Sdk as a Cake Tool #tool nuget:?package=Shift.Core.Sdk&version=1.0.3
Shift CLI
Introduction
Shift CLI is a command line interface tool that surfaces Shift Core functionality.
Shift Core
Shift always comes in pairs with a manifest file. A manifest file is a list of components and tasks that makes up a product. Think of components as lego pieces, and the tasks as an instruction set. Shift downloads the components from the location specified in the manifest file, and performs a set of instructions specified sequentially. Essentially, Shift Core analyzes and interprets the manifest file.
manifest.json
Manifest contains a list of components, a list of bundles, component locations, and component tasks. Below is an example of a manifest file.
{
"Version": "{{VERSION}}",
"Components": [
{
"id": "nullTaskComponent",
"description": "Component with no task",
"owner": "chaelee",
"deviceDemands": [ "windows", "pc" ],
"location": {
"organization": "microsoft",
"project": "180A7408-2DEB-44D9-AE8D-992FA4C3B9A6",
"feed": "Product.Components.Release",
"name": "nullTaskComponent",
"version": "0.1.0"
},
"task": null
},
],
"Bundles": [
{
"bundles": [],
"components": [
"nullTaskComponent"
],
"description": "The default bundle",
"id": "default"
}
]
}
Section | Attributes | Description | Example | Type |
---|---|---|---|---|
Version | Version of the manifest file. This should not change. | "{{VERSION}}" | ||
Components | id | Unique identifier for the component | "noTaskComponent" | string |
description | Description of the component | "Component with no task" | string | |
owner | Owner of the component | "chaelee", "chaelee@microsoft" | string | |
deviceDemands | Specification of where the component belongs. | ["windows", "hololens2", "xbox", "pc", "ios", "android"] | array of strings | |
location | ADO feed location of where the artifact sits. Currently we do not support other ADO location such as pipeline artifact, but we intend to implement it if there are enough requests. You can also specify network directory location. | {"organization": "microsoft", "project": "180A7408-2DEB-44D9-AE8D-992FA4C3B9A6", "feed": "Product.Components.Release", "name": "pluginTestComponent", "version": "0.1.0"}, {"path": "\\mrfs\private\openxr\ARDK-WinInProcVulkan\CannonDemo" } | object | |
task | Task to perform with the artifact. See the task section for more details. | object | ||
Bundles | bundles | A bundle can reference another bundle. | ["default", "example_apps"] | array of strings |
components | List of components | ["noTaskComponent"] | array of strings | |
description | Description of the bundle | "The default bundle" | string | |
id | Unique identifier for the bundle | "default" | string |
Specifying the task
Powershell task
You can specify a PowerShell task as below:
{
"id": "pwshTaskComponent",
"description": "Test component with powersell task type",
"owner": "chaelee",
"deviceDemands": [ "windows", "pc" ],
"location": {
"organization": "microsoft",
"project": "180A7408-2DEB-44D9-AE8D-992FA4C3B9A6",
"feed": "Product.Components.Release",
"name": "pwshTaskComponent",
"version": "0.1.0"
},
"task": {
"type": "pwsh",
"script": "echo \"Hello, Shift\""
}
}
Custom task
Shift also allows you to specify custom tasks. This is done through writing a custom plugin for your product. Implement the abstract class PluginDefinition
, and add it to the list of plugin definitions in the Program.cs
file within the cli project. Below is an example component with a custom plugin task. Reach out to chaelee@microsoft.com for questions.
{
"id": "pluginTaskComponent",
"description": "Test component with plugin task type",
"owner": "chaelee",
"deviceDemands": [ "headset" ],
"location": {
"organization": "microsoft",
"project": "180A7408-2DEB-44D9-AE8D-992FA4C3B9A6",
"feed": "Product.Components.Release",
"name": "pluginTaskComponent",
"version": "0.1.0"
},
"task": {
"type": "customPluginName",
"action": "HeadsetInstall"
}
}
Specifying a network directory location
You can also specify the network directory location to copy the file. This is not advised since it may be unreliable and we are unsure how long we will support this.
{
"id": "directoryTestComponent",
"description": "Tests a component that is download only, no task.",
"owner": "chaelee",
"deviceDemands": [ "windows", "pc" ],
"location": {
"path": "\\\\mrfs\\private\\openxr\\ARDK-WinInProcVulkan\\CannonDemo"
}
}
Shift CLI commands
shift.exe init --path [path to the local manifest file]
Downloads and installs the specified local manifest.
shift.exe install [path to the local manifest file] -c [components] -v [versions] -b [bundle]
Install a specific component This command lets you download and install a specific component. You may input a single component by its id, or a comma-separated list of components. If you do not input a version number, the version number from the lkg (latest-stable) build will be grabbed. If you want to install multiple components but want to specify a single version number, version input should also be a comma-separated list of versions. Notice the commas in the below example:
command | component 1 version | component 2 version |
---|---|---|
shift.exe install c1,c2 | latest stable | latest stable |
shift.exe install c1,c2 -v 0.0.1, | 0.0.1 | latest stable |
shift.exe install c1,c2 -v ,0.0.1 | latest stable | 0.0.1 |
shift.exe install c1,c2 -v 0.0.1,0.0.1 | 0.0.1 | 0.0.1 |
shift.exe download [path to the local manifest file] -c [components] -v [versions] -b [bundle]
This command lets you download a specific component. You may input a single component by its id, or a comma-separated list of components. If you do not input a version number, the version number from the lkg (latest-stable) build will be grabbed. If you want to download multiple components but want to specify a version number for a specific component, version input should also be a comma-separated list of versions. Notice the commas in the below example:
command | component 1 version | component 2 version |
---|---|---|
shift.exe install c1,c2 | latest stable | latest stable |
shift.exe install c1,c2 -v 0.0.1, | 0.0.1 | latest stable |
shift.exe install c1,c2 -v ,0.0.1 | latest stable | 0.0.1 |
shift.exe install c1,c2 -v 0.0.1,0.0.1 | 0.0.1 | 0.0.1 |
Contributing
This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.
When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.
This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net6.0
- Azure.Identity (>= 1.7.0)
- DeepCloner (>= 0.10.4)
- Microsoft.Extensions.Caching.Memory (>= 6.0.1)
- Microsoft.Extensions.Configuration (>= 6.0.1)
- Microsoft.Extensions.Configuration.Binder (>= 6.0.0)
- Microsoft.Extensions.Configuration.Json (>= 6.0.0)
- Microsoft.Extensions.DependencyInjection (>= 6.0.0)
- Microsoft.Extensions.Logging (>= 6.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 6.0.2)
- Microsoft.TeamFoundationServer.Client (>= 16.193.0-preview)
- Microsoft.VisualStudio.Services.Packaging.Client (>= 16.193.0-preview)
- System.CommandLine (>= 2.0.0-beta1.21216.1)
- System.CommandLine.Hosting (>= 0.3.0-alpha.21216.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.0.12 | 209 | 10/24/2022 |
1.0.11 | 175 | 10/20/2022 |
1.0.10 | 271 | 10/19/2022 |
1.0.9 | 161 | 10/17/2022 |
1.0.8 | 165 | 10/14/2022 |
1.0.7 | 155 | 10/12/2022 |
1.0.6 | 163 | 10/11/2022 |
1.0.5 | 160 | 10/11/2022 |
1.0.4 | 173 | 10/10/2022 |
1.0.3 | 159 | 10/7/2022 |
1.0.2 | 163 | 10/4/2022 |
1.0.1 | 166 | 10/4/2022 |
1.0.0 | 255 | 10/4/2022 |
0.0.1 | 171 | 10/4/2022 |
0.0.1-prerelease | 142 | 10/4/2022 |