{"id":20558064,"url":"https://github.com/dineshba/azure-devops-artifacts-downloader","last_synced_at":"2026-04-20T00:05:41.788Z","repository":{"id":144407347,"uuid":"609767405","full_name":"dineshba/azure-devops-artifacts-downloader","owner":"dineshba","description":"A tool to download all the artifacts specified in azure-pipelines.yaml and keep it ready for testing things in local","archived":false,"fork":false,"pushed_at":"2023-04-21T09:18:07.000Z","size":31,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-16T18:36:37.877Z","etag":null,"topics":["aritfact-downloader","automation","azure-devops","azure-devops-pipelines"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dineshba.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-03-05T07:02:40.000Z","updated_at":"2023-07-10T08:00:15.000Z","dependencies_parsed_at":null,"dependency_job_id":"f9bdca02-0fef-45bd-9649-5eed5bdcba01","html_url":"https://github.com/dineshba/azure-devops-artifacts-downloader","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dineshba%2Fazure-devops-artifacts-downloader","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dineshba%2Fazure-devops-artifacts-downloader/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dineshba%2Fazure-devops-artifacts-downloader/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dineshba%2Fazure-devops-artifacts-downloader/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dineshba","download_url":"https://codeload.github.com/dineshba/azure-devops-artifacts-downloader/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242163952,"owners_count":20082228,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aritfact-downloader","automation","azure-devops","azure-devops-pipelines"],"created_at":"2024-11-16T03:41:57.190Z","updated_at":"2025-12-07T00:02:14.203Z","avatar_url":"https://github.com/dineshba.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Azure Devops Artifacts Downloader (ado-ad)\n\nA tool to download all the artifacts specified in `azure-pipelines.yaml` and keep it ready for testing things in local\n\n- [Why do we need this tool](#why-do-we-need-this-tool)\n- [Usage example](#usage-example)\n  * [Use your existing azure-pipelines yaml](#use-your-existing-azure-pipelines-yaml)\n  * [Setup authentication and azure-devops project configuration](#setup-authentication-and-azure-devops-project-configuration)\n  * [Run ado-ad to download the artifacts and put in current directory](#run-ado-ad-to-download-the-artifacts-and-put-in-current-directory)\n  * [Re-run of ado-ad and forcefully download new artifact](#re-run-of-ado-ad-and-forcefully-download-new-artifact)\n- [TODO](#todo)\n\n## Why do we need this tool\n- When we want to setup an environment for debugging things in our local machine instead of testing in ado agents\n- When we want to test our code with artifacts from multiple pipeline\n- Because it is not part of [azure-pipeline-agent](https://github.com/microsoft/azure-pipelines-agent/issues/2479)\n\n## Usage example\n\n### Use your existing azure-pipelines yaml\n```yaml\nresources:\n  pipelines:\n  - pipeline: _pipeline1\n    source: teamA\\repo1\\pipeline1\n    branch: main                  # ado-ad will download latest successful build artifact of branch main and put in _pipeline1 directory\n\n  - pipeline: _directory1/pipeline2\n    source: teamA\\repo1\\pipeline2\n    version: \"20230215.8\"         # ado-ad will download build's artifact from run id \"20230215.8\" and put in _directory1/pipeline2 directory\n\n  - pipeline: _directory2\n    source: teamA\\repo2\\pipeline1\n    branch: my-new-feature-branch # ado-ad will download latest successful build artifact of branch my-new-feature-branch and put in _directory2 directory\n\n  - pipeline: _directory3\n    source: teamA\\repo2\\pipeline2 # ado-ad will download latest successful build artifact across all branch and put in _directory3 directory\n```\n\n\u003e when both version and branch are specified, then version will have higher precedence than branch.\n\n\u003e when branch is not specified, it will download latest successful across all branch (same as ado pipeline agents)\n\n\u003e For testing with artifacts from your branch/PR/buildNumber, edit yaml file and run below steps\n\n### Setup authentication and azure-devops project configuration\nSetup 3 environment variables\n\n\u003e You should have PAT token which has access to list builds,builddefinitions and download artifacts\n\n#### For Linux\n```sh\nexport AZURE_DEVOPS_ORG_URL=\"https://dev.azure.com/your-org-url\"\nexport AZURE_DEVOPS_PROJECT_NAME=\"your-project-name\"\nexport AZURE_DEVOPS_EXT_PAT=\"your-personal-access-token-xxxxxxxxxxxx\"\n```\n\n### For windows\n```pwsh\n$env:AZURE_DEVOPS_ORG_URL = \"https://dev.azure.com/your-org-url\"\n$env:AZURE_DEVOPS_PROJECT_NAME = \"your-project-name\"\n$env:AZURE_DEVOPS_EXT_PAT = \"your-personal-access-token-xxxxxxxxxxxx\"\n```\n\n### Run ado-ad to download the artifacts and put in current directory\n\n#### For Linux\n```sh\n./ado-ad azure-pipeline.yaml\n```\n### For windows\n```pwsh\n./ado-ad.exe azure-pipeline.yaml\n```\n\n### Re-run of ado-ad and forcefully download new artifact\nDuring the first run of `./ado-ad` run, it will create file called `.ado-ad.state` file, whose content will be like\n```yaml\nstate:\n  _pipeline1: 546638\n  _directory1/pipeline2: 910629\n  _directory2: 721132\n  _directory3: 721134\n```\nDuring re-run, it will not download already downloaded artifact. It will only download the updated artifacts and missing artifact.\n\n\u003e It will move the current `.ado-ad.state` to `.ado-ad.state.bak`\n\n#### Scenerio 1\nLet say for first pipeline `_pipeline1`, there is a new build for main branch available. (in above example, `branch: main` is specified)\nDuring next, it will update the artifact of `_pipeline1`\n#### Scenerio 2\nYou want to re-download few artifacts. Then remove the corresponding line in the `.ado-ad.state` file. In next run, it will download the missing artifacts.\n\n## TODO\n- [ ] Show progress of download (remaining %)\n- [ ] Run artifacts in parallel using go routine\n- [ ] New Flag to specify the destination directory\n- [ ] New Flag to print the version of the binary\n- [ ] Add some unit tests and add CI Pipeline\n- [ ] Download artifacts across multiple projects (now, it is possible only within `AZURE_DEVOPS_PROJECT_NAME` project)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdineshba%2Fazure-devops-artifacts-downloader","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdineshba%2Fazure-devops-artifacts-downloader","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdineshba%2Fazure-devops-artifacts-downloader/lists"}