microsoft / winget-cli

WinGet is the Windows Package Manager. This project includes a CLI (Command Line Interface), PowerShell modules, and a COM (Component Object Model) API (Application Programming Interface).
https://learn.microsoft.com/windows/package-manager/
MIT License
23.03k stars 1.43k forks source link

Configure export command #4434

Closed msftrubengu closed 5 months ago

msftrubengu commented 5 months ago

This PR introduces the configure export command as an exprimental feature. This is mostly a proof of concept and should not be considered a full feature.

Scenario A - Create a configuration to install a winget package.

Use --pacakgeId with the package identifier of an application in the winget source to produce a configuration file that uses the Microsoft.WinGet.DSC/WinGetPackage resource to install the package via winget. Right now, we don't validate if the package id exists and will just copy what the user sets into the settings of the resource.

Scenario B - 'Export' the configuration from the specified resource.

Use both --module and --resource to get the configuration of a resource and add it to the configuration file. Internally, configuration will install the module (if not installed already) and call Get on the resource. We will then try to serialize its property into the configuration file. Current limitation is that if a resource has a required setting (like WinGetPackage required Id) it won't work. If the resource is not found in the gallery a retry will be performed allowing prereleased modules in the case it exists.

Scenario C - Mix of A and B

If --packageId, --module and --resource are used, configure export will produce two resources. The first one is the WinGetPackage for the specified package. The second one is the same as in B, with the difference that it includes a dependency of the previously created WinGetPackage resource.

Scenario D - Configuration file already exists.

If the file passed to the --output parameters already exists and is a valid configuration file, the resources will be appended. There is currently not validation into the correctness of this, so it can result in a configuration with resources with the same id.

For example winget configure export --packageId Microsoft.AppInstaller --module Microsoft.WinGet.DSC --resource WinGetUserSettings -o test_export.yml would produce the following file

# Created using winget configure export 1.8.0-preview
# yaml-language-server: $schema=https://aka.ms/configuration-dsc-schema/0.2
properties:
  configurationVersion: 0.2
  resources:
  - resource: Microsoft.WinGet.DSC/WinGetPackage
    id: Microsoft.AppInstaller
    directives:
      description: Install Microsoft.AppInstaller
      allowPrerelease: true
    settings:
      id: Microsoft.AppInstaller
      source: winget
  - resource: Microsoft.WinGet.DSC/WinGetUserSettings
    dependsOn:
    - Microsoft.AppInstaller
    directives:
      description: Configure Microsoft.AppInstaller
    settings:
      Settings:
        experimentalFeatures:
          configureSelfElevate: true
        installBehavior:
          preferences:
            locale:
            - en-US
            - fr-FR
        $schema: https://aka.ms/winget-settings.schema.json
      Action: Full
Microsoft Reviewers: Open in CodeFlow
github-actions[bot] commented 5 months ago

@check-spelling-bot Report

:red_circle: Please review

See the :open_file_folder: files view or the :scroll:action log for details.

Unrecognized words (3)

hashtables kool Rquired

Previously acknowledged words that are now absent ata bitspace EPester epth hrow issuetitle mapview Mta oop PFM STARTUPINFOW testdata visualstudiocode :arrow_right:
To accept :heavy_check_mark: these unrecognized words as correct and remove the previously acknowledged and now absent words, run the following commands ... in a clone of the [git@github.com:msftrubengu/winget-cli.git](https://github.com/msftrubengu/winget-cli.git) repository on the `config_export` branch ([:information_source: how do I use this?]( https://github.com/check-spelling/check-spelling/wiki/Accepting-Suggestions)): ``` sh curl -s -S -L 'https://raw.githubusercontent.com/check-spelling/check-spelling/v0.0.21/apply.pl' | perl - 'https://github.com/microsoft/winget-cli/actions/runs/8903395578/attempts/1' ```
Available :books: dictionaries could cover words not in the :blue_book: dictionary This includes both **expected items** (543) from .github/actions/spelling/expect.txt and **unrecognized words** (3) Dictionary | Entries | Covers -|-|- [cspell:win32/src/win32.txt](https://raw.githubusercontent.com/check-spelling/cspell-dicts/v20220816/dictionaries/win32/src/win32.txt)|53509|20| [cspell:python/src/python/python-lib.txt](https://raw.githubusercontent.com/check-spelling/cspell-dicts/v20220816/dictionaries/python/src/python/python-lib.txt)|3873|3| [cspell:python/src/python/python.txt](https://raw.githubusercontent.com/check-spelling/cspell-dicts/v20220816/dictionaries/python/src/python/python.txt)|453|2| [cspell:python/src/common/extra.txt](https://raw.githubusercontent.com/check-spelling/cspell-dicts/v20220816/dictionaries/python/src/common/extra.txt)|741|2| [cspell:php/php.txt](https://raw.githubusercontent.com/check-spelling/cspell-dicts/v20220816/dictionaries/php/php.txt)|2597|2| [cspell:npm/npm.txt](https://raw.githubusercontent.com/check-spelling/cspell-dicts/v20220816/dictionaries/npm/npm.txt)|288|2| [cspell:django/django.txt](https://raw.githubusercontent.com/check-spelling/cspell-dicts/v20220816/dictionaries/django/django.txt)|859|2| [cspell:csharp/csharp.txt](https://raw.githubusercontent.com/check-spelling/cspell-dicts/v20220816/dictionaries/csharp/csharp.txt)|19|2| [cspell:sql/src/tsql.txt](https://raw.githubusercontent.com/check-spelling/cspell-dicts/v20220816/dictionaries/sql/src/tsql.txt)|455|1| [cspell:scala/scala.txt](https://raw.githubusercontent.com/check-spelling/cspell-dicts/v20220816/dictionaries/scala/scala.txt)|833|1| Consider adding them using (in `.github/workflows/spelling3.yml`): ``` yml with: extra_dictionaries: cspell:win32/src/win32.txt cspell:python/src/python/python-lib.txt cspell:python/src/python/python.txt cspell:python/src/common/extra.txt cspell:php/php.txt cspell:npm/npm.txt cspell:django/django.txt cspell:csharp/csharp.txt cspell:sql/src/tsql.txt cspell:scala/scala.txt ``` To stop checking additional dictionaries, add: ``` yml with: check_extra_dictionaries: '' ```
Warnings (1) See the [:open_file_folder: files](4434/files/) view or the [:scroll:action log](https://github.com/microsoft/winget-cli/actions/runs/8903395578/job/24451066831#step:4:1) for details. [:information_source: Warnings](https://github.com/check-spelling/check-spelling/wiki/Event-descriptions) | Count -|- [:information_source: unexpected-line-ending](https://github.com/check-spelling/check-spelling/wiki/Event-descriptions#unexpected-line-ending) | 1 See [:information_source: Event descriptions](https://github.com/check-spelling/check-spelling/wiki/Event-descriptions) for more information.
If the flagged items are :exploding_head: false positives If items relate to a ... * binary file (or some other file you wouldn't want to check at all). Please add a file path to the `excludes.txt` file matching the containing file. File paths are Perl 5 Regular Expressions - you can [test]( https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your files. `^` refers to the file's path from the root of the repository, so `^README\.md$` would exclude [README.md]( ../tree/HEAD/README.md) (on whichever branch you're using). * well-formed pattern. If you can write a [pattern](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns) that would match it, try adding it to the `patterns.txt` file. Patterns are Perl 5 Regular Expressions - you can [test]( https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your lines. Note that patterns can't match multiline strings.