Отправка манифеста в репозиторий

После создания манифеста пакета, который описывает приложение, вы можете отправить манифест в репозиторий Диспетчера пакетов Windows. Это общедоступный репозиторий, содержащий коллекцию манифестов, к которым может получить доступ инструмент winget . Чтобы отправить манифест, передайте его в репозиторий с открытым исходным кодом https://github.com/microsoft/winget-pkgs на сайте GitHub.

После отправки запроса на вытягивание для добавления нового манифеста в репозиторий GitHub файл манифеста будет проверен с помощью автоматизированного процесса. Это позволит убедиться, что пакет соответствует политикам Диспетчера пакетов Windows и не является вредоносным. Если проверка прошла успешно, пакет будет добавлен в общедоступный репозиторий Диспетчера пакетов Windows, чтобы его можно было обнаружить с помощью клиентской программы winget. Обратите внимание на различие между манифестами в репозитории GitHub с открытым исходным кодом и в общедоступном репозитории Диспетчера пакетов Windows.

Важно!

Корпорация Майкрософт оставляет за собой право отказаться от отправки по любой причине.

Проверка манифеста

При отправке манифеста в репозиторий https://github.com/microsoft/winget-pkgs на сайте GitHub манифест будет автоматически проверен и оцениваться для обеспечения безопасности экосистемы Windows. Манифесты также могут быть просмотрены вручную.

Дополнительные сведения о процессе проверки см . в разделе "Процесс проверки" ниже.

Отправка манифеста

Чтобы отправить манифест в репозиторий, выполните следующие действия.

Шаг 1. Проверка манифеста

В программе winget предусмотрена команда validate, позволяющая убедиться в правильности созданного манифеста. Используйте эту команду, чтобы проверить манифест.

winget validate \<path-to-the-manifests>

Если проверка завершается сбоем, воспользуйтесь сообщениями об ошибках, чтобы узнать номер строки и внести исправление. После проверки манифеста его можно отправить в репозиторий.

Шаг 2. Тестирование манифеста с помощью Песочница Windows

Репозиторий Диспетчер пакетов Windows включает скрипт, который установит Диспетчер пакетов Windows в песочнице для тестирования отправки манифестов. Чтобы запустить скрипт PowerShell, перейдите к репозиторию winget-pkgs. В PowerShell введите следующую команду:

powershell .\Tools\SandboxTest.ps1 manifests\m\Microsoft\VisualStudioCode\1.56.0

Возможно, потребуется обновить этот скрипт с правильным путем к файлу манифеста: .\Tools\SandboxTest.ps1 <path to manifest or manifest folder>

См. полный скрипт тестирования песочницы в репозитории winget-pkgs.

Шаг 3. Клонирование репозитория

Чтобы создать вилку репозитория сообщества Диспетчер пакетов Windows и клонировать репозиторий на локальный компьютер:

  1. Перейдите https://github.com/microsoft/winget-pkgs в браузер и выберите "Форк". screenshot of fork button on GitHub

  2. В командной строке Windows или PowerShell используйте следующую команду, чтобы клонировать вилку.

    git clone <your-fork-name>
    
  3. Если вы вводите несколько отправк, создайте ветвь вместо вилки. Сейчас поддерживается отправка только одного файла манифеста за раз.

    git checkout -b <branch-name>
    

Шаг 4. Добавление манифеста в локальный репозиторий

Файлы манифеста необходимо добавить в репозиторий с использованием следующей структуры папок:

манифесты / буква / издатель / приложение / версия

  • Папка manifests является корневой для всех манифестов в репозитории.
  • Папка буква — это первая буква названия издателя в нижнем регистре. Например, для издателя Microsoft будет использоваться буква m.
  • Имя папки издатель — это название компании, опубликовавшей программное обеспечение. Например, Microsoft.
  • Имя папки приложение — это имя приложения или средства. Например, VSCode.
  • Папка версия — это версия программного средства или приложения. Например, 1.0.0.

Значения PackageIdentifier и PackageVersion в манифесте должны соответствовать издателю, а также именам и версии приложений в пути к папке манифеста. Дополнительные сведения см. в статье Создание манифеста пакета.

Шаг 5. Отправка манифеста в удаленный репозиторий

Теперь вы можете отправить новый манифест в удаленный репозиторий.

  1. Добавить файлы, зафиксировать изменения и предоставить сведения об отправке можно с помощью команды commit.

    git commit -m "Submitting ContosoApp version 1.0.0" --all
    
  2. Чтобы отправить изменения в удаленный репозиторий, используйте команду push.

    git push
    

Шаг 6. Создание запроса на вытягивание

После отправки изменений вернитесь на страницу https://github.com/microsoft/winget-pkgs и создайте запрос на включение внесенных изменений для слияния вилки или ветви с главной ветвью.

screenshot of pull request tab

Процесс отправки

При создании запроса на вытягивание запускается автоматизированный процесс для проверки манифестов и обработки запроса. Во время этого процесса мы снова запустим тесты средств установки и установленных двоичных файлов, чтобы проверить новую отправку приложения.

Мы добавляем метки к запросу на вытягивание, чтобы вы могли отслеживать ход его выполнения. Дополнительные сведения о метках и процессе см . в разделе меток запроса на вытягивание ниже.

По завершении отправленные вами данные будут вручную проверены модератором. После утверждения приложение будет добавлено в каталог Диспетчер пакетов Windows.

Если при проверке произойдет ошибка, мы известим вас об этом, а присвоенные метки и наш бот помогут вам исправить проблемы с отправкой приложения. Список распространенных ошибок см. в разделе "Процесс проверки" ниже.

Процесс проверки

При создании запроса на вытягивание для отправки манифеста в репозиторий Диспетчера пакетов Windows запускается процесс автоматизации, который проверяет манифест и обрабатывает запрос на вытягивание. Метки GitHub используются для обозначения хода выполнения и связи с нами.

Ожидаемые характеристики отправки

Все отправки приложений в репозиторий Диспетчер пакетов Windows должны соответствовать политикам Диспетчер пакетов Windows репозитория.

Ожидания отправки:

  • Манифест соответствует требованиям схемы.
  • Все URL-адреса в манифесте ведут к надежным веб-сайтам.
  • Установщик и приложение не содержат вирусов. По ошибке пакет может быть идентифицирован как вредоносная программа. Если вы считаете, что это ложно срабатывание, то можете отправить установщик для анализа в службу технической поддержки Microsoft Defender.
  • Корректно установить и удалить приложение могут как администраторы, так и другие пользователи.
  • Установщик поддерживает неинтерактивные режимы.
  • Все записи манифеста точны и не вводят в заблуждение.
  • Установщик поставляется непосредственно с веб-сайта издателя.

Полный список политик см. в этой статье.

Метки запроса на включение внесенных изменений

Во время проверки ряд меток применяется к запросам на вытягивание для обмена данными о ходе выполнения. Некоторые метки укажут вам на необходимость выполнить определенные действия, а другие будут направлены команде разработчиков Диспетчера пакетов Windows.

Метки состояния

В приведенной ниже таблице описаны возможные метки состояния.

Подпись Подробности
Azure-Pipeline-Passed Манифест завершил тестовый проход. Он ожидает утверждения. Если во время тестового прохода не будут обнаружены проблемы, манифест будут автоматически утвержден. Если проверка не будет пройдена, он может быть помечен для проверки вручную.
Blocking-Issue Эта метка указывает, что запрос на вытягивание нельзя утвердить, так как возникла блокирующая проблема. Как правило, эту проблему можно определить по включенной метке ошибки.
Needs-Attention Эта метка означает, что запрос на вытягивание должна рассмотреть команда разработчиков Диспетчера пакетов Windows. Это может быть вызвано ошибкой при тестировании, которую необходимо проверить вручную, или комментарием, добавленным к запросу участниками сообщества.
Needs-Author-Feedback Произошел сбой отправки. Мы повторно назначим вам запрос на вытягивание. Если вы не устраните эту проблему в течение 10 дней, бот закроет этот запрос. Метки Needs-Author-Feedback обычно добавляются после сбоя запроса на вытягивание, который нужно обновить, или если у пользователя, который рассматривает запрос, возникает вопрос.
Validation-Completed Указывает, что тестовый проход успешно завершен и ваш запрос на вытягивание будет объединен.

Метки ошибок

В приведенной ниже таблице описаны возможные метки ошибок. Не все ошибки будут назначены вам немедленно. В некоторых случаях может возникнуть необходимость проверки вручную.

Подпись Подробности
Binary-Validation-Error Приложение, входящее в этот запрос на вытягивание, не прошло тест Сканирование установщиков. Этот тест предназначен для того, чтобы приложение устанавливалось во всех средах без предупреждений. Дополнительные сведения об этой ошибке см. в разделе об ошибке двоичной проверки ниже.
Error-Analysis-Timeout Истекло время ожидания теста Binary-Validation-Test. Запрос на вытягивание будет назначен одному из разработчиков Диспетчера пакетов Windows для рассмотрения.
Error-Hash-Mismatch Не удалось обработать отправленный манифест из-за несоответствия хэша InstallerSha256, предоставленного для InstallerURL. Измените InstallerSha256 в запросе на вытягивание и повторите попытку.
Error-Installer-Availability Службе проверки не удалось скачать установщик. Возможно, это связано с блокированием диапазонов IP-адресов Azure или неправильным URL-адресом установщика. Проверьте правильность InstallerURL и повторите попытку. Если вы считаете, что произошла ошибка, добавьте комментарий, и запрос на вытягивание будет назначен одному из разработчиков Диспетчера пакетов Windows для изучения.
Manifest-Installer-Validation-Error Во время оценки пакета MSIX отсутствуют несоответствия или значения, которые отсутствуют в манифесте.
Manifest-Path-Error Файлы манифеста должны быть размещены в определенной структуре папок. Эта метка указывает на проблему с путем отправляемых файлов. Например, структура папок не соответствует требуемому формату. Обновите манифест и путь, а затем повторно отправьте запрос.
Manifest-Validation-Error Отправленный манифест содержит синтаксическую ошибку. Устраните проблемы с синтаксисом манифеста и повторите отправку. См. дополнительные сведения о формате и схеме манифеста.
PullRequest-Error Запрос на вытягивание недопустим, так как не все отправленные файлы находятся в папке манифеста либо в запросе несколько пакетов или версий. Обновите запрос, чтобы устранить эту ошибку, и повторите попытку.
URL-Validation-Error Тесту проверки URL-адресов не удалось найти URL-адрес, и он вернул код состояния ошибки HTTP (403 или 404), либо произошел сбой при проверке репутации URL-адреса. Вы можете определить, в каком URL-адресе причина, просмотрев сведения о проверке запроса на вытягивание. Чтобы устранить эту проблему, измените URL-адреса, чтобы устранить код состояния ошибки HTTP. Если проблема не связана с кодом состояния ошибки HTTP, можете отправить URL-адрес для проверки, чтобы исключить ошибку, связанную с проверкой репутации.
Validation-Defender-Error Во время динамического тестирования Microsoft Defender была обнаружена проблема. Чтобы воспроизвести эту проблему, установите приложение, а затем запустите полное сканирование Microsoft Defender. Если вы можете воспроизвести проблему, исправьте двоичный файл или отправьте его для анализа, чтобы получить помощь в случае ложноположительного результата. Если проблему воспроизвести не удается, добавьте комментарий, чтобы разработчики Диспетчера пакетов Windows изучили этот вопрос.
Validation-Domain Тест определил домен, если InstallerURL не соответствует ожидаемому домену. Согласно политикам Диспетчера пакетов Windows InstallerUrl должен поступать непосредственно из расположения выпуска независимого поставщика программного обеспечения. Если вы считаете, что ошибки нет, добавьте комментарий в запрос на вытягивание, чтобы разработчики Диспетчера пакетов Windows изучили этот вопрос.
Validation-Error При утверждении вручную произошел сбой проверки Диспетчера пакетов Windows. Для выполнения дальнейших действий ознакомьтесь с сопроводительным комментарием.
Validation-Executable-Error Во время тестирования установки не удалось обнаружить основное приложение. Убедитесь, что приложение правильно устанавливается на всех платформах. Если ваше приложение не предназначено для установки приложения, но все равно его нужно добавить в репозиторий, добавьте комментарий в запрос на вытягивание, чтобы разработчики Диспетчера пакетов Windows изучили этот вопрос.
Validation-Hash-Verification-Failed Во время тестирования установки не удалось установить приложение, так как InstallerSha256 больше не соответствует хэшу InstallerURL. Это может произойти, если приложение находится за запоминающимся URL-адресом, а установщик был обновлен без обновления InstallerSha256. Чтобы устранить эту ошибку, обновите InstallerSha256, связанный с InstallerURL, и повторите отправку.
Validation-HTTP-Error URL-адрес, используемый для установщика, не использует протокол HTTPS. Обновите InstallerURL, чтобы использовать HTTPS, и повторно отправьте запрос на вытягивание.
Validation-Indirect-URL URL-адрес не поступает непосредственно от сервера независимого поставщика программного обеспечения. Тестирование определило, что используется перенаправитель. Это запрещено — согласно политикам Диспетчера пакетов Windows InstallerUrl должен поступать непосредственно из расположения выпуска независимого поставщика программного обеспечения. Удалите перенаправление и повторите отправку.
Validation-Installation-Error Во время проверки этого пакета вручную произошла общая ошибка. Для выполнения дальнейших действий ознакомьтесь с сопроводительным комментарием.
Validation-Merge-Conflict Не удалось проверить этот пакет из-за конфликта слияния. Устраните конфликт слияния и отправьте запрос на вытягивание повторно.
Validation-MSIX-Dependency Пакет MSIX зависит от пакета, который не удалось разрешить. Обновите пакет, включив в него недостающие компоненты, или добавьте зависимость в файл манифеста и повторно отправьте запрос на вытягивание.
Validation-Unapproved-URL Тест определил домен, если InstallerURL не соответствует ожидаемому домену. Согласно политикам Диспетчера пакетов Windows InstallerUrl должен поступать непосредственно из расположения выпуска независимого поставщика программного обеспечения.
Validation-Unattended-Failed Во время установки истекло время ожидания теста. Скорее всего, это связано с тем, что приложение не устанавливается автоматически. Это также может быть вызвано некоторыми другими ошибками и остановкой теста. Убедитесь, что вы можете установить манифест без действий со стороны пользователя. Если вам нужна помощь, добавьте комментарий в запрос на вытягивание, чтобы разработчики Диспетчера пакетов Windows изучили этот вопрос.
Validation-Uninstall-Error Во время тестирования удаления выяснилось, что приложение не выполнило полную очистку после удаления. Более подробная информация приведена в сопроводительном комментарии.
Validation-VCRuntime-Dependency Пакет зависит от среды выполнения C++, которую не удалось разрешить. Обновите пакет, включив в него недостающие компоненты, или добавьте зависимость в файл манифеста и повторно отправьте запрос на вытягивание.

Метки политик в отношении содержимого

В приведенной ниже таблице перечислены метки политик в отношении содержимого. Если добавляется одна из этих меток, то в метаданных манифеста запускается дополнительная проверка содержимого вручную, чтобы обеспечить соответствие метаданных политикам Диспетчера пакетов Windows.

Подпись Подробности
Policy-Test-2.1 См. раздел Общие требования к содержимому.
Policy-Test-2.2 См. раздел Содержимое, включая названия и логотипы (оригинальные и третьих лиц).
Policy-Test-2.3 См. раздел Риск ущерба.
Policy-Test-2.4 См. раздел Содержимое дискредитирующего, клеветнического, порочащего или угрожающего характера.
Policy-Test-2.5 См. раздел Оскорбительное содержимое.
Policy-Test-2.6 См. раздел Алкоголь, табак, оружие и наркотики.
Policy-Test-2.7 См. раздел Содержимое для взрослых.
Policy-Test-2.8 См. раздел Противозаконная деятельность.
Policy-Test-2.9 См. раздел Чрезмерное употребление ненормативной лексики и неприемлемое содержимое.
Policy-Test-2.10 См. раздел Специальные требования для страны или региона.
Policy-Test-2.11 См. раздел Возрастные категории.
Policy-Test-2.12 См. Созданное пользователем содержимое.

Внутренние метки

В таблице ниже перечислены метки внутренних ошибок. При обнаружении внутренних ошибок запрос на вытягивание будет назначен разработчикам Диспетчера пакетов Windows для рассмотрения.

Подпись Подробности
Internal-Error-Domain Произошла ошибка при проверке домена URL-адреса.
Internal-Error-Dynamic-Scan Произошла ошибка во время проверки установленных двоичных файлов.
Internal-Error-Keyword-Policy Произошла ошибка при проверке манифеста.
Internal-Error-Manifest Произошла ошибка при проверке манифеста.
Internal-Error-NoArchitectures Произошла ошибка, так как тест не смог распознать архитектуру как приложение.
Internal-Error-NoSupportedArchitectures Произошла ошибка, так как текущая архитектура не поддерживается.
Internal-Error-PR Во время обработки запроса на вытягивание произошла ошибка.
Internal-Error-Static-Scan Во время статического анализа установщиков произошла ошибка.
Internal-Error-URL Произошла ошибка при проверке репутации установщиков.
Internal-Error Во время тестового прохода произошел общий сбой или неизвестная ошибка.

Ошибка двоичной проверки

Если проверка запроса на вытягивание завершается сбоем теста проверки установщиков и получает метку binary-Validation-Error, это означает, что приложение не удалось установить во всех средах.

Тест проверки установщиков

Чтобы обеспечить оптимальное взаимодействие с пользователем при установке приложений, Диспетчер пакетов Windows должен гарантировать нормальную установку всех приложений на компьютерах с любой версией среды. Один из ключевых тестов заключается в проверке того, не возникают ли предупреждения со стороны многих популярных антивирусных средств при установке какого-либо приложения. В Windows предоставляется встроенная антивирусная программа Microsoft Defender, но многие корпоративные клиенты и пользователи используют другие антивирусные программы.

Каждая отправка в репозиторий Диспетчера пакетов Windows проверяется несколькими антивирусными программами. Все эти программы используют разные алгоритмы для обнаружения вирусов, потенциально нежелательных приложений и вредоносных программ.

Устранение ошибок при проверке двоичных файлов

Если приложение не проходит такую проверку, корпорация Майкрософт сначала обращается к производителю антивирусной программы, чтобы проверить возможность ложноположительного результата. Во многих случаях производители антивирусных программ вносят коррективы в свои алгоритмы, после чего приложение успешно проходит проверку.

Иногда поставщик антивирусной программы не может определить, является ли обнаруженная аномалия кода ложноположительной. В этом случае приложение нельзя добавить в репозиторий Диспетчера пакетов Windows. Запрос на вытягивание отклоняется и устанавливается метка Binary-Validation-Error.

Если к вашему запросу на вытягивание применена метка Binary-Validation-Error, обновите программное обеспечение, удалив потенциально нежелательный код.

Иногда правомерно работающие средства, предназначенные для отладки и низкоуровневых операций, антивирусные программы распознают как потенциально нежелательные приложения. Это связано с тем, что необходимый для отладки код имеет похожую сигнатуру, как у вредоносных программ. Хотя такие подходы к написанию кода законны, к сожалению, публикация таких приложений в репозитории Диспетчера пакетов Windows запрещена.

Устранение неполадок при отправке

Если отправка Диспетчер пакетов Windows завершается ошибкой, можно использовать метки, описанные выше, для изучения причины сбоя.

Чтобы проанализировать сбои запросов на вытягивание, выполните следующие действия:

  1. Ошибка запроса на вытягивание отображается внизу веб-страницы со строкой Some checks were not successful (Некоторые проверки не пройдены). Щелкните ссылку Details (Подробнее) рядом с непройденной проверкой, чтобы перейти на страницу Azure Pipelines.

    Screenshot of a pull request failure.

  2. На странице Azure Pipelines щелкните ссылку 0 errors / 0 warnings (Ошибок: 0, предупреждений: 0).

    Screenshot of the Azure Pipelines page.

  3. На следующей странице выберите задание со сбоем.

    Screenshot of the error details.

  4. На следующей странице отобразятся выходные данные этого задания. Эти выходные данные помогут вам определить, какие изменения вы должны внести для исправления манифеста.

    В приведенном ниже примере сбой произошел при выполнении задачи Installation Validation (Проверка установки).

    Screenshot of the failed job output.