Installation
Étape 1 : Installer .NET Windows Runtime
Si vous ne l’avez pas déjà fait, installez la dernière version de .NET 8 Desktop Runtime. Cet outil est obligatoire pour exécuter Microsoft Store Developer CLI.
Le moyen le plus simple de l’installer consiste à utiliser winget :
winget install Microsoft.DotNet.DesktopRuntime.8
Étape 2 : Installer l’interface CLI du développeur du Microsoft Store sur Windows
Vous pouvez télécharger Microsoft Store Developer CLI à partir du Microsoft Store. Vous pouvez également utiliser winget :
winget install "Microsoft Store Developer CLI"
Étape 1 : Installer .NET macOS Runtime
Si vous ne l’avez pas déjà fait, installez la dernière version de .NET 8 Runtime. Cet outil est obligatoire pour exécuter Microsoft Store Developer CLI.
Étape 2 : Installer l’interface CLI du développeur du Microsoft Store sur macOS
Vous pouvez télécharger le fichier macOS .tar.gz adapté à votre architecture (x64 ou Arm64) à partir de la page des versions de Microsoft Store Developer CLI. Une fois le téléchargement terminé, extrayez l’archive et placez les fichiers dans le chemin d’accès de votre choix, par exemple :
mkdir MSStoreCLI
curl https://github.com/microsoft/msstore-cli/releases/latest/download/MSStoreCLI-osx-x64.tar.gz -o MSStoreCLI-osx-x64.tar.gz
tar -xvf MSStoreCLI-osx-x64.tar.gz -C ./MSStoreCLI
sudo cp -R MSStoreCLI/. /usr/local/bin
Vous pouvez également utiliser brew :
brew install microsoft/msstore-cli/msstore-cli
Étape 1 : Installer .NET Linux Runtime
Si vous ne l’avez pas déjà fait, installez la dernière version de .NET 8 Runtime. Cet outil est obligatoire pour exécuter Microsoft Store Developer CLI.
Étape 2 : Installer l’interface CLI du développeur du Microsoft Store sur Linux
Vous pouvez télécharger le fichier Linux .tar.gz adapté à votre architecture (x64 ou Arm64) à partir de la page des versions de Microsoft Store Developer CLI. Une fois le téléchargement terminé, extrayez l’archive et placez les fichiers dans le chemin d’accès de votre choix, par exemple :
mkdir MSStoreCLI
wget https://github.com/microsoft/msstore-cli/releases/latest/download/MSStoreCLI-linux-x64.tar.gz
tar -xvf MSStoreCLI-linux-x64.tar.gz -C ./MSStoreCLI
sudo cp -R MSStoreCLI/. /usr/local/bin
Vous pouvez également utiliser brew :
brew install microsoft/msstore-cli/msstore-cli
Commande Info
Imprimer la configuration existante.
Usage
msstore info
Options
| Choix |
Descriptif |
| -v, --détaillé |
Imprimer une sortie détaillée. |
| -?, -h, --aide |
Affichez les informations d’aide et d’utilisation. |
Configurez à nouveau l’interface CLI du développeur du Microsoft Store. Vous pouvez fournir un secret client ou un certificat. Les certificats peuvent être fournis via son empreinte numérique ou en fournissant un chemin d’accès de fichier (avec ou sans mot de passe).
Usage
msstore reconfigure
Options
| Choix |
Descriptif |
| -t, --identifiantLocataire |
Spécifiez l’ID de locataire à utiliser. |
| -s, --sellerId (identifiantVendeur) |
Spécifiez l’ID de vendeur à utiliser. |
| -c, --clientId |
Spécifiez l’ID client à utiliser. |
| -cs, --clientSecret |
Spécifiez le secret client qui doit être utilisé. |
| -ct, --certificateEmpreinte numérique |
Spécifiez l’empreinte numérique du certificat à utiliser. |
| -cfp, --certificateFilePath (chemin d'accès au fichier de certificat) |
Spécifiez le chemin d’accès au fichier de certificat qui doit être utilisé. |
| -cp, --certificateMot de passe |
Spécifiez le mot de passe de certificat à utiliser. |
| --réinitialisation |
Réinitialisez uniquement les informations d’identification, sans recommencer. |
| -v, --détaillé |
Imprimer une sortie détaillée. |
| -?, -h, --aide |
Affichez les informations d’aide et d’utilisation. |
Settings, commande
Modifiez les paramètres de l’interface CLI du développeur du Microsoft Store.
Usage
msstore settings
Options
| Choix |
Descriptif |
| -t, --activerTélémetrie |
Activez (vide/true) ou désactivez la télémétrie (false). |
| -v, --détaillé |
Imprimer une sortie détaillée. |
| -?, -h, --aide |
Affichez les informations d’aide et d’utilisation. |
SetPDN Sous-Commande
Définissez la propriété Nom complet du serveur de publication utilisée par la commande init.
Usage
msstore settings setpdn <publisherDisplayName>
Les arguments
| Raisonnement |
Descriptif |
publisherDisplayName |
Propriété Nom complet du serveur de publication qui sera définie globalement. |
Options
| Choix |
Descriptif |
| -?, -h, --aide |
Affichez les informations d’aide et d’utilisation. |
Commande Apps
| Sous-commande |
Descriptif |
|
liste |
Répertorie toutes les applications de votre compte. |
|
Avoir |
Obtient les détails d’une application spécifique. |
Applications - Liste - Utilisation
msstore apps list
Options
| Choix |
Descriptif |
| -v, --détaillé |
Imprimer une sortie détaillée. |
| -?, -h, --aide |
Affichez les informations d’aide et d’utilisation. |
Applications - Télécharger - Utilisation
msstore apps get <productId>
Les arguments
| Raisonnement |
Descriptif |
productId |
ID du produit du Store. |
Options
| Choix |
Descriptif |
| -v, --détaillé |
Imprimer une sortie détaillée. |
| -?, -h, --aide |
Affichez les informations d’aide et d’utilisation. |
Commande Submission
| Sous-commande |
Descriptif |
|
statut |
Obtient l’état d’une soumission. |
|
Avoir |
Obtient les métadonnées et les informations de package d’une soumission spécifique. |
|
getListingAssets |
Obtient les ressources de référencement d’une soumission spécifique. |
|
updateMetadata |
Met à jour les métadonnées d’une soumission spécifique. |
|
scrutin |
Interroge l’état d’une soumission. |
|
publier |
Publie une soumission spécifique. |
|
supprimer |
Supprime une soumission spécifique. |
Soumission - État - Utilisation
msstore submission status <productId>
Les arguments
| Raisonnement |
Descriptif |
productId |
ID du produit du Store. |
Options
| Choix |
Descriptif |
| -v, --détaillé |
Imprimer une sortie détaillée. |
| -?, -h, --aide |
Affichez les informations d’aide et d’utilisation. |
Envoi - Récupération - Utilisation
msstore submission get <productId>
Les arguments
| Raisonnement |
Descriptif |
productId |
ID du produit du Store. |
Options
| Choix |
Descriptif |
| -v, --détaillé |
Imprimer une sortie détaillée. |
| -?, -h, --aide |
Affichez les informations d’aide et d’utilisation. |
Soumission - GetListingAssets - Utilisation
msstore submission getListingAssets <productId>
Les arguments
| Raisonnement |
Descriptif |
productId |
ID du produit du Store. |
Options
| Choix |
Descriptif |
| -v, --détaillé |
Imprimer une sortie détaillée. |
| -?, -h, --aide |
Affichez les informations d’aide et d’utilisation. |
msstore submission updateMetadata <productId> <metadata>
Les arguments
| Raisonnement |
Descriptif |
productId |
ID du produit du Store. |
metadata |
Représentation des métadonnées JSON mise à jour. |
Options
| Choix |
Descriptif |
| -s, --passerInterrogationInitiale |
Ignorez l’interrogation initiale avant d’exécuter l’action. [valeur par défaut : False] |
| -v, --détaillé |
Imprimer une sortie détaillée. |
| -?, -h, --aide |
Affichez les informations d’aide et d’utilisation. |
Soumission - Sondage - Utilisation
msstore submission poll <productId>
Les arguments
| Raisonnement |
Descriptif |
productId |
ID du produit du Store. |
Options
| Choix |
Descriptif |
| -v, --détaillé |
Imprimer une sortie détaillée. |
| -?, -h, --aide |
Affichez les informations d’aide et d’utilisation. |
Soumission - Publier - Utilisation
msstore submission publish <productId>
Les arguments
| Raisonnement |
Descriptif |
productId |
ID du produit du Store. |
Options
| Choix |
Descriptif |
| -v, --détaillé |
Imprimer une sortie détaillée. |
| -?, -h, --aide |
Affichez les informations d’aide et d’utilisation. |
Soumission - Supprimer - Utilisation
msstore submission delete <productId>
Les arguments
| Raisonnement |
Descriptif |
productId |
ID du produit du Store. |
Options
| Choix |
Descriptif |
| --no-confirm |
Ne pas demander de confirmation. [valeur par défaut : False] |
| -v, --détaillé |
Imprimer une sortie détaillée. |
| -?, -h, --aide |
Affichez les informations d’aide et d’utilisation. |
Commande Init
La init commande vous aide à configurer votre application pour publier sur le Microsoft Store. Il prend actuellement en charge les types d’applications suivants :
- SDK d’application Windows / WinUI 3
- Plateforme Windows Universelle (UWP)
- .NET MAUI
- Voleter
- Électron
- React Native pour Desktop
- PWA
Exemples d’utilisation
SDK d’application Windows / WinUI 3
msstore init "C:\path\to\winui3_app"
Plateforme Windows Universelle (UWP)
msstore init "C:\path\to\uwp_app"
.NET MAUI
msstore init "C:\path\to\maui_app"
Voleter
msstore init "C:\path\to\flutter_app"
Électron
msstore init "C:\path\to\electron_app"
React Native pour Desktop
msstore init "C:\path\to\react_native_app"
Remarque
Pour Electron, ainsi que React Native pour les projets Desktop, les deux Npm sont Yarn pris en charge. La présence du fichier de Yarn verrou (yarn.lock) sera utilisée pour déterminer le gestionnaire de package à utiliser. Veillez donc à archiver votre fichier de verrouillage dans votre système de contrôle de code source.
PWA
msstore init https://contoso.com --output .
Les arguments
| Raisonnement |
Descriptif |
pathOrUrl |
Chemin d’accès au répertoire racine où se trouve le fichier projet, ou URL publique pointant vers une PWA. |
Options
| Choix |
Descriptif |
| -n, --publisherDisplayName |
Nom complet du serveur de publication utilisé pour configurer l’application. Si elle est fournie, évite un appel d’API supplémentaire. |
| --colis |
Si le type d’application est pris en charge, packe automatiquement le projet. |
| --publier |
Si le type d’application est pris en charge, publie automatiquement le projet. Implique « --package true » |
| -f, --flightId (identifiant de vol) |
Spécifie l’ID de vol où le package sera publié. |
| -prp, --pourcentageDeDéploiementDuPackage |
Spécifie le pourcentage de déploiement du package. La valeur doit être comprise entre 0 et 100. |
| -a, --arch |
Architecture(s) à générer. Si ce n’est pas le cas, l’architecture par défaut pour le système d’exploitation actuel et le type de projet seront utilisées. Valeurs autorisées : « x86 », « x64 », « arm64 ». Utilisé uniquement avec « --package true ». |
| -o, --sortie |
Répertoire de sortie dans lequel l’application empaquetée sera stockée. S’il n’est pas fourni, le répertoire par défaut pour chaque type d’application différent sera utilisé. |
| -ver, --version |
Version utilisée lors de la génération de l’application. S’il n’est pas fourni, la version du fichier projet est utilisée. |
Commande Package
Vous aide à empaqueter votre application du Microsoft Store en tant que MSIX.
Exemples d’utilisation
SDK d’application Windows / WinUI 3
msstore package "C:\path\to\winui3_app"
Plateforme Windows Universelle (UWP)
msstore package "C:\path\to\uwp_app"
.NET MAUI
msstore package "C:\path\to\maui_app"
Voleter
msstore package "C:\path\to\flutter_app"
Électron
msstore package "C:\path\to\electron_app"
React Native pour Desktop
msstore package "C:\path\to\react_native_app"
PWA
msstore package "C:\path\to\pwa_app"
Les arguments
| Choix |
Descriptif |
pathOrUrl |
Chemin d’accès au répertoire racine où se trouve le fichier projet, ou URL publique pointant vers une PWA. |
Options
| Choix |
Descriptif |
| -o, --sortie |
Répertoire de sortie dans lequel l’application empaquetée sera stockée. S’il n’est pas fourni, le répertoire par défaut pour chaque type d’application différent sera utilisé. |
| -a, --arch |
Architecture(s) à générer. Si ce n’est pas le cas, l’architecture par défaut pour le système d’exploitation actuel et le type de projet seront utilisées. Valeurs autorisées : « x86 », « x64 », « arm64 ». |
| -ver, --version |
Version utilisée lors de la génération de l’application. S’il n’est pas fourni, la version du fichier projet est utilisée. |
Commande Publish
Elle publie votre application dans Microsoft Store.
Exemples d’utilisation
SDK d’application Windows / WinUI 3
msstore publish "C:\path\to\winui3_app"
Plateforme Windows Universelle (UWP)
msstore publish "C:\path\to\uwp_app"
.NET MAUI
msstore publish "C:\path\to\maui_app"
Voleter
msstore publish "C:\path\to\flutter_app"
Électron
msstore publish "C:\path\to\electron_app"
React Native pour Desktop
msstore publish "C:\path\to\react_native_app"
PWA
msstore publish "C:\path\to\pwa_app"
Les arguments
| Choix |
Descriptif |
pathOrUrl |
Chemin d’accès au répertoire racine où se trouve le fichier projet, ou URL publique pointant vers une PWA. |
Options
| Choix |
Descriptif |
| -i, --fichierEntrée |
Chemin d’accès au fichier « .msix » ou « .msixupload » à utiliser pour la commande de publication. S’il n’est pas précisé, l’interface CLI tente de trouver le meilleur candidat sur la base de l’argument « pathOrUrl ». |
| -id, --appId |
Indique l'ID de l'application. Nécessaire uniquement dans le cas où le projet n'a pas déjà été initialisé avec la commande « init ». |
| -nc, --noCommit |
Désactive la validation de la soumission, en la conservant dans l’état brouillon. |
| -f, --flightId (identifiant de vol) |
Spécifie l’ID de vol où le package sera publié. |
| -prp, --pourcentageDeDéploiementDuPackage |
Spécifie le pourcentage de déploiement du package. La valeur doit être comprise entre 0 et 100. |
Commande de Vols
| Sous-commande |
Descriptif |
|
liste |
Récupère tous les vols pour l’application spécifiée. |
|
Avoir |
Récupère un vol pour l'application et le vol spécifiés. |
|
supprimer |
Supprime un déploiement pour l'application et le déploiement spécifiés. |
|
create |
Crée un vol pour l'application et le vol spécifiés. |
|
soumission |
Exécutez les tâches liées aux soumissions de vol. |
Vols - Liste - Utilisation
msstore flights list <productId>
Les arguments
| Raisonnement |
Descriptif |
productId |
ID de produit. |
Options
| Choix |
Descriptif |
| -v, --détaillé |
Imprimer une sortie détaillée. |
| -?, -h, --aide |
Affichez les informations d’aide et d’utilisation. |
Vols - Obtenir - Utilisation
msstore flights get <productId> <flightId>
Les arguments
| Raisonnement |
Descriptif |
productId |
ID de produit. |
flightId |
ID de vol. |
Options
| Choix |
Descriptif |
| -v, --détaillé |
Imprimer une sortie détaillée. |
| -?, -h, --aide |
Affichez les informations d’aide et d’utilisation. |
Vols - Supprimer - Utilisation
msstore flights delete <productId> <flightId>
Les arguments
| Raisonnement |
Descriptif |
productId |
ID de produit. |
flightId |
ID de vol. |
Options
| Choix |
Descriptif |
| -v, --détaillé |
Imprimer une sortie détaillée. |
| -?, -h, --aide |
Affichez les informations d’aide et d’utilisation. |
Vols - Créer - Utilisation
msstore flights create <productId> <friendlyName> --group-ids <group-ids>
Les arguments
| Raisonnement |
Descriptif |
productId |
ID de produit. |
friendlyName |
Nom convivial du vol. |
Options
| Choix |
Descriptif |
| -g, --group-ids |
Les IDs de groupe à associer au vol. |
| -r, --classer-plus-élevé-que |
Identifiant de vol à classer plus haut que. |
| -v, --détaillé |
Imprimer une sortie détaillée. |
| -?, -h, --aide |
Affichez les informations d’aide et d’utilisation. |
Vols - Présentation
| Sous-commande |
Descriptif |
|
Avoir |
Récupère la soumission de package existante, soit le brouillon existant, soit la dernière version publiée. |
|
supprimer |
Supprime la soumission de vol de package en attente du store. |
|
mise à jour |
Met à jour le brouillon de vol existant avec le JSON fourni. |
|
publier |
Démarre le processus de soumission de vol pour le brouillon existant. |
|
scrutin |
Interroge jusqu’à ce que la soumission de vol existante soit PUBLIÉE ou ÉCHOUE. |
|
statut |
Récupère l’état actuel de la soumission de déploiement du store. |
|
Déploiement |
Exécutez les opérations associées au déploiement de vol. |
Vols - Soumission - Récupérer - Utilisation
msstore flights submission get <productId> <flightId>
Les arguments
| Raisonnement |
Descriptif |
productId |
ID de produit. |
flightId |
ID de vol. |
Options
| Choix |
Descriptif |
| -v, --détaillé |
Imprimer une sortie détaillée. |
| -?, -h, --aide |
Affichez les informations d’aide et d’utilisation. |
Vols - Soumission - Suppression - Utilisation
msstore flights submission delete <productId> <flightId>
Les arguments
| Raisonnement |
Descriptif |
productId |
ID de produit. |
flightId |
ID de vol. |
Options
| Choix |
Descriptif |
| --no-confirm |
Ne pas demander de confirmation. |
| -v, --détaillé |
Imprimer une sortie détaillée. |
| -?, -h, --aide |
Affichez les informations d’aide et d’utilisation. |
Vols - Soumission - Mise à jour - Utilisation
msstore flights submission update <productId> <flightId> <product>
Les arguments
| Raisonnement |
Descriptif |
productId |
ID de produit. |
flightId |
ID de vol. |
product |
Représentation de produit JSON mise à jour. |
Options
| Choix |
Descriptif |
| -s, --passerInterrogationInitiale |
Ignorez l’interrogation initiale avant d’exécuter l’action. [valeur par défaut : False] |
| -v, --détaillé |
Imprimer une sortie détaillée. |
| -?, -h, --aide |
Affichez les informations d’aide et d’utilisation. |
Vols - Soumission - Publication - Utilisation
msstore flights publish <productId> <flightId>
Les arguments
| Raisonnement |
Descriptif |
productId |
ID de produit. |
flightId |
ID de vol. |
Options
| Choix |
Descriptif |
| -v, --détaillé |
Imprimer une sortie détaillée. |
| -?, -h, --aide |
Affichez les informations d’aide et d’utilisation. |
Vols - Soumission - Sondage - Utilisation
msstore flights poll <productId> <flightId>
Les arguments
| Raisonnement |
Descriptif |
productId |
ID de produit. |
flightId |
ID de vol. |
Options
| Choix |
Descriptif |
| -v, --détaillé |
Imprimer une sortie détaillée. |
| -?, -h, --aide |
Affichez les informations d’aide et d’utilisation. |
Vols - Soumission - État - Utilisation
msstore flights status <productId> <flightId>
Les arguments
| Raisonnement |
Descriptif |
productId |
ID de produit. |
flightId |
ID de vol. |
Options
| Choix |
Descriptif |
| -v, --détaillé |
Imprimer une sortie détaillée. |
| -?, -h, --aide |
Affichez les informations d’aide et d’utilisation. |
Vols - Soumission - Déploiement
| Sous-commande |
Descriptif |
|
Avoir |
Récupère l’état de déploiement de vol d’une soumission. |
|
mise à jour |
Mettez à jour le pourcentage de déploiement progressif d’une soumission. |
|
Arrêter |
Arrête le lancement du vol d’une soumission. |
|
Finaliser |
Finalise le lancement du vol d’une soumission. |
Vols - Soumission - Lancement - Obtenir - Utilisation
msstore flights submission rollout get <productId> <flightId>
Les arguments
| Raisonnement |
Descriptif |
productId |
ID de produit. |
flightId |
ID de vol. |
Options
| Choix |
Descriptif |
| -s, --identifiantSoumission |
ID de soumission. |
| -v, --détaillé |
Imprimer une sortie détaillée. |
| -?, -h, --aide |
Affichez les informations d’aide et d’utilisation. |
Vols - Soumission - Lancement - Mise à jour - Utilisation
msstore flights submission rollout update <productId> <flightId> <percentage>
Les arguments
| Raisonnement |
Descriptif |
productId |
ID de produit. |
flightId |
ID de vol. |
percentage |
Pourcentage d’utilisateurs qui recevront le lancement de la soumission. |
Options
| Choix |
Descriptif |
| -s, --idSoumission |
ID de soumission. |
| -v, --détaillé |
Imprimer une sortie détaillée. |
| -?, -h, --aide |
Affichez les informations d’aide et d’utilisation. |
Vols - Soumission - Lancement - Arrêt - Utilisation
msstore flights submission rollout halt <productId> <flightId>
Les arguments
| Raisonnement |
Descriptif |
productId |
ID de produit. |
flightId |
ID de vol. |
Options
| Choix |
Descriptif |
| -s, --submissionId |
ID de soumission. |
| -v, --détaillé |
Imprimer une sortie détaillée. |
| -?, -h, --aide |
Affichez les informations d’aide et d’utilisation. |
Vols - Soumission - Déploiement - Finaliser - Utilisation
msstore flights submission rollout finalize <productId> <flightId>
Les arguments
| Raisonnement |
Descriptif |
productId |
ID de produit. |
flightId |
ID de vol. |
Options
| Choix |
Descriptif |
| -s, --submissionId |
ID de soumission. |
| -v, --détaillé |
Imprimer une sortie détaillée. |
| -?, -h, --aide |
Affichez les informations d’aide et d’utilisation. |
Environnements CI/CD
Microsoft Store Developer CLI (préversion) prend en charge l’exécution dans les environnements CI/CD. Cela signifie que vous pouvez utiliser l’interface CLI du développeur du Microsoft Store (préversion) dans vos pipelines CI/CD pour publier automatiquement vos applications dans le Microsoft Store.
La première étape pour y parvenir pour installer l’interface CLI du développeur du Microsoft Store (préversion) sur votre environnement CI/CD. Vous pouvez consulter des instructions sur la façon d’y parvenir ici.
Après avoir installé l’interface CLI du développeur du Microsoft Store (préversion), vous devez configurer votre environnement pour pouvoir exécuter des commandes. Pour ce faire, exécutez la msstore reconfigure commande avec les paramètres spécifiques qui identifient votre compte espace partenaires (TenantId, SellerId, ClientId). Vous devez également fournir un ClientSecret ou un certificat.
Il est très important de masquer ces informations d’identification, car elles seront visibles dans les journaux de votre pipeline CI/CD. Pour ce faire, utilisez des secrets. Chaque système de pipeline CI/CD a des noms différents pour ces secrets. Par exemple, Azure DevOps les appelle variables secrètes, mais GitHub Action les appelle secrets chiffrés. Créez un secret pour chacun des paramètres (TenantId, SellerId, ClientId et ClientSecret ou certificat), puis utilisez la reconfigure commande pour configurer votre environnement.
Par exemple :
Azure DevOps
- task: UseMSStoreCLI@0
displayName: Setup Microsoft Store Developer CLI
- script: msstore reconfigure --tenantId $(PARTNER_CENTER_TENANT_ID) --sellerId $(PARTNER_CENTER_SELLER_ID) --clientId $(PARTNER_CENTER_CLIENT_ID) --clientSecret $(PARTNER_CENTER_CLIENT_SECRET)
displayName: Configure Microsoft Store Developer CLI
Actions GitHub
- name: Setup Microsoft Store Developer CLI
uses: microsoft/microsoft-store-apppublisher@v1.1
- name: Configure Microsoft Store Developer CLI
run: msstore reconfigure --tenantId ${{ secrets.PARTNER_CENTER_TENANT_ID }} --sellerId ${{ secrets.PARTNER_CENTER_SELLER_ID }} --clientId ${{ secrets.PARTNER_CENTER_CLIENT_ID }} --clientSecret ${{ secrets.PARTNER_CENTER_CLIENT_SECRET }}
Une fois cette commande exécutée, l’interface CLI du développeur du Microsoft Store (préversion) est configurée pour utiliser les informations d’identification fournies. Vous pouvez maintenant utiliser l’interface CLI pour développeurs du Microsoft Store (préversion) dans votre pipeline CI/CD.