Skip to content

jessehouwing/azdo-marketplace

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1,904 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Azdo Marketplace Action & Tasks

This repository hosts GitHub Actions and Azure Pipelines tasks to package, publish, and manage Azure DevOps extensions in the Visual Studio Marketplace.

Available commands

  • Package: Package an Azure DevOps extension into a .vsix file.
  • Publish: Optionally package and publish an extension to the Visual Studio Marketplace.
  • Unpublish: Remove an extension from the Visual Studio Marketplace.
  • Share: Share an extension with an Azure DevOps organization.
  • Unshare: Remove sharing for an extension from one or more Azure DevOps organizations.
  • Install: Install an extension into an Azure DevOps organization.
  • Show: Query extension metadata from the marketplace.
  • Query version: Query the current extension version and optionally increment it.
  • Wait for validation: Wait for Marketplace validation to finish.
  • Wait for installation: Wait until extension tasks are available in target organizations.

Documentation

Required scopes

When creating a PAT for pipeline automation, include at least the following scopes:

  • Publish: Marketplace (publish)
  • Unpublish: Marketplace (manage)
  • Share: Marketplace (publish)
  • Unshare: Marketplace (publish)
  • Install: Extensions (read and manage), Marketplace (acquire)
  • Show: Marketplace (read)
  • Query version: Marketplace (read)
  • Wait for validation: Marketplace (read)
  • Wait for installation: Extensions (read and manage), Agent Pools (read)

Permissions

GitHub Marketplace sample (main action)

- uses: jessehouwing/azdo-marketplace@v6
  id: publish
  with:
    operation: publish
    auth-type: pat
    token: ${{ secrets.MARKETPLACE_TOKEN }}
    publisher-id: my-publisher
    extension-id: my-extension
    manifest-file: vss-extension.json

- run: echo "VSIX: ${{ steps.publish.outputs.vsix-file }}"
- run: echo "VSIX file name: ${{ steps.publish.outputs.vsix-file-name }}"

Manifests in a subfolder

- uses: jessehouwing/azdo-marketplace@v6
  with:
    operation: package
    working-directory: tests/sample-extension
    manifest-file: vss-extension.json

For manifest-based operations, manifest-file patterns are resolved from working-directory when specified. If working-directory is omitted, the current working directory is used.

Main action inputs

General

  • operation: Selects which command to run (package, publish, install, share, unshare, unpublish, show, query-version, wait-for-validation, wait-for-installation).

Connection & Authentication

  • auth-type: Chooses authentication mode (pat, basic, oidc) for authenticated operations.
  • service-url: Overrides the Azure DevOps/Marketplace endpoint for supported operations.
  • token: Provides the secret token used for pat and basic authentication.
  • tfx-version: Selects the tfx-cli source (built-in, path, or npm version spec); built-in uses the bundled version, while path uses tfx from PATH.
  • username: Provides the username when auth-type is basic.

Extension Identity

  • extension-id: Sets or overrides the extension identifier inside the publisher namespace (required for show, optional for install/share/unshare/unpublish/wait-for-validation/query-version when inferred from manifest or VSIX inputs).
  • publisher-id: Sets or overrides the extension publisher identifier (required for show, optional for install/share/unshare/unpublish/wait-for-validation/query-version when inferred from manifest or VSIX inputs).

Input Sources

  • manifest-file: Points to one or more manifest files used for manifest-based operations and identity fallback in install/share/unshare/unpublish/wait-for-validation/query-version.
  • working-directory: Sets the base directory for manifest-based operations. manifest-file patterns are resolved from this directory when specified.
  • manifest-file-js: Points to a JS manifest module for tfx --manifest-js.
  • overrides-file: Points to an overrides JSON file merged into manifest packaging/publishing.
  • use: Chooses publish input source (manifest or vsix).
  • vsix-file: Points to a pre-built VSIX file when publishing from VSIX source.
  • vsix-file: Provides a VSIX file for identity/task discovery in install/share/unshare/validation flows.

Packaging Options

  • bypass-validation: Skips package-time validation checks.
  • extension-name: Overrides extension display name during package/publish.
  • extension-pricing: Overrides pricing behavior (default, free, paid).
  • extension-version: Overrides extension version during package/publish/validation flows.
  • extension-visibility: Overrides marketplace visibility (private, public, preview variants).
  • localization-root: Points to localization resources for package/publish.
  • no-wait-validation: Skips waiting for marketplace validation after publish.
  • output-path: Sets where generated VSIX files are written.
  • update-tasks-id: Regenerates deterministic task IDs for extension variants.
  • update-tasks-version: Controls task version update strategy (none, major, minor, patch).

Organization Targeting

  • accounts: Provides newline-separated Azure DevOps organizations for install/share/unshare/verification operations.

Query Version Inputs

  • marketplace-version-action: Controls how the queried marketplace version is transformed (None, Major, Minor, Patch).
  • version-source: Specifies which version sources to consider (newline-separated); highest valid semver wins. Values: marketplace, manifest, vsix, or a semver literal. Defaults to marketplace.

Wait For Validation / Installation

  • polling-interval-seconds: Sets polling interval between checks.
  • timeout-minutes: Sets total wait time.

Wait For Installation

  • expected-tasks: Provides task/version expectations to verify.

Main action outputs

Package / Publish

  • vsix-file: Returns path to the generated VSIX file.
  • vsix-file-name: Returns the generated VSIX filename (for example publisher.extension-1.2.3.vsix).

Show

  • metadata: Returns extension metadata JSON.

Query Version Outputs

  • current-version: Returns the current version before any increment is applied.
  • proposed-version: Returns the computed version after applying the version action.
  • version-source: Returns the source that provided the winning version (marketplace, manifest, vsix, or literal).

GitHub Marketplace samples (individual composite actions)

package

- uses: jessehouwing/azdo-marketplace/package@v6
  id: package
  with:
    publisher-id: my-publisher
    extension-id: my-extension
    working-directory: extension
    manifest-file: vss-extension.json

- run: echo "Packaged: ${{ steps.package.outputs.vsix-file }}"
- run: echo "Packaged filename: ${{ steps.package.outputs.vsix-file-name }}"

publish

- uses: jessehouwing/azdo-marketplace/publish@v6
  with:
    token: ${{ secrets.MARKETPLACE_TOKEN }}
    publisher-id: my-publisher
    extension-id: my-extension
    working-directory: extension
    manifest-file: vss-extension.json

install

- uses: jessehouwing/azdo-marketplace/install@v6
  with:
    token: ${{ secrets.MARKETPLACE_TOKEN }}
    working-directory: extension
    manifest-file: vss-extension.json
    accounts: myorg

share

- uses: jessehouwing/azdo-marketplace/share@v6
  with:
    token: ${{ secrets.MARKETPLACE_TOKEN }}
    working-directory: extension
    manifest-file: vss-extension.json
    accounts: customer-org

unshare

- uses: jessehouwing/azdo-marketplace/unshare@v6
  with:
    token: ${{ secrets.MARKETPLACE_TOKEN }}
    working-directory: extension
    manifest-file: vss-extension.json
    accounts: old-customer-org

unpublish

- uses: jessehouwing/azdo-marketplace/unpublish@v6
  with:
    token: ${{ secrets.MARKETPLACE_TOKEN }}
    working-directory: extension
    manifest-file: vss-extension.json

show

- uses: jessehouwing/azdo-marketplace/show@v6
  id: show
  with:
    token: ${{ secrets.MARKETPLACE_TOKEN }}
    publisher-id: my-publisher
    extension-id: my-extension

- run: echo '${{ steps.show.outputs.metadata }}'

query-version

- uses: jessehouwing/azdo-marketplace/query-version@v6
  id: query
  with:
    token: ${{ secrets.MARKETPLACE_TOKEN }}
    publisher-id: my-publisher
    extension-id: my-extension
    working-directory: extension
    manifest-file: vss-extension.json
    marketplace-version-action: Patch

- run: echo "Next: ${{ steps.query.outputs.proposed-version }}"

wait-for-validation

- uses: jessehouwing/azdo-marketplace/wait-for-validation@v6
  with:
    token: ${{ secrets.MARKETPLACE_TOKEN }}
    working-directory: extension
    manifest-file: vss-extension.json

wait-for-installation

- uses: jessehouwing/azdo-marketplace/wait-for-installation@v6
  with:
    token: ${{ secrets.MARKETPLACE_TOKEN }}
    publisher-id: my-publisher
    extension-id: my-extension
    accounts: myorg
    working-directory: extension
    manifest-file: vss-extension.json

Contribute

  1. From the root of the repo run npm run initdev. This will pull down the necessary modules and TypeScript declare files.
  2. Run npm run build to compile the build tasks.
  3. Run npm run package to create a .vsix extension package that includes the build tasks.

About

Azure Pipelines and GitHub Actions for the Azure DevOps Marketplace

Topics

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Sponsor this project

  •  

Contributors

Languages

  • TypeScript 91.3%
  • JavaScript 8.5%
  • PowerShell 0.2%