{"id":21385357,"url":"https://github.com/touchifyapp/vsts-changed-files","last_synced_at":"2025-07-20T02:09:12.575Z","repository":{"id":42000746,"uuid":"271834994","full_name":"touchifyapp/vsts-changed-files","owner":"touchifyapp","description":"Azure DevOps pipeline task to get changed files since last succeeded build","archived":false,"fork":false,"pushed_at":"2025-01-28T11:38:21.000Z","size":1121,"stargazers_count":13,"open_issues_count":17,"forks_count":6,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-07T12:52:03.449Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","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/touchifyapp.png","metadata":{"files":{"readme":"README.md","changelog":"changed-files/index.ts","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":"2020-06-12T15:46:43.000Z","updated_at":"2025-01-28T11:38:22.000Z","dependencies_parsed_at":"2025-01-28T12:24:15.535Z","dependency_job_id":"f315b7b0-083c-4907-8115-1fa7b397668c","html_url":"https://github.com/touchifyapp/vsts-changed-files","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/touchifyapp/vsts-changed-files","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/touchifyapp%2Fvsts-changed-files","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/touchifyapp%2Fvsts-changed-files/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/touchifyapp%2Fvsts-changed-files/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/touchifyapp%2Fvsts-changed-files/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/touchifyapp","download_url":"https://codeload.github.com/touchifyapp/vsts-changed-files/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/touchifyapp%2Fvsts-changed-files/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266057193,"owners_count":23870121,"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":[],"created_at":"2024-11-22T11:47:01.627Z","updated_at":"2025-07-20T02:09:12.535Z","avatar_url":"https://github.com/touchifyapp.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Azure DevOps Task: Changed Files\n\n![CI](https://github.com/touchifyapp/vsts-changed-files/workflows/CI/badge.svg?event=push)\n\nPipeline task to get changed files and apply conditions according to those changes.\n\n\n\u003e [!IMPORTANT]\n\u003e This task has been upgraded to latest execution environment *(Node 20 + azure-pipelines-task-lib v4)* to adress security issues and deprecation warnings. **This upgrade has been released in a major version (v2)**.\n\u003e \n\u003e - If you're using a self-hosted Azure Agent prior to `v3.224.1`, **please stick on version 1**.\n\u003e - If you're using an `Azure hosted Azure Agent` or a self-hosted Azure Agent upgraded to `v3.224.1` or above, **please upgrade to version 2** to ensure you're on the latest execution environment.\n\n## Installation\n\nInstallation can be done using [Visual Studio MarketPlace](https://marketplace.visualstudio.com/items?itemName=touchify.vsts-changed-files).\n\n## Source Code\n\nSource code can be found on [Github](https://github.com/touchifyapp/vsts-changed-files).\n\n## Simple usage\n\n```yaml\njobs: \n  - job: check\n    displayName: Check changed files\n    pool:\n        vmImage: ubuntu-latest\n    steps:\n      - task: ChangedFiles@2\n        name: CheckChanges\n        inputs:\n          rules: src/**/*.ts\n          variable: HasChanged\n\n  - job: build\n    displayName: Build only when code changes\n    dependsOn: check\n    condition: eq(dependencies.check.outputs['CheckChanges.HasChanged'], 'true')\n    steps:\n        - # Add your build steps here\n```\n\n## Multi-variable usage\n\n```yaml\njobs: \n  - job: check\n    displayName: Check changed files\n    pool:\n        vmImage: ubuntu-latest\n    steps:\n      - task: ChangedFiles@2\n        name: CheckChanges\n        inputs:\n          rules: |\n            [CodeChanged]\n            src/**/*.ts\n            src/**/*.html\n\n            [TestsChanged]\n            tests/**/*.ts\n\n  - job: build\n    displayName: Build only when code changes\n    dependsOn: check\n    condition: eq(dependencies.check.outputs['CheckChanges.CodeChanged'], 'true')\n    steps:\n        - # Add your build steps here\n        \n  - job: tests\n    displayName: Tests only when code changes or tests changes\n    dependsOn: check\n    condition: or(eq(dependencies.check.outputs['CheckChanges.CodeChanged'], 'true'), eq(dependencies.check.outputs['CheckChanges.TestsChanged'], 'true'))\n    steps:\n        - # Add your build steps here\n```\n\n## Multi-branch usage\n\n```yaml\njobs: \n  - job: check\n    displayName: Check changed files\n    pool:\n        vmImage: ubuntu-latest\n    steps:\n      - task: ChangedFiles@2\n        name: CheckChanges\n        inputs:\n          refBranch: master\n          rules: |\n            [CodeChanged]\n            src/**/*.ts\n            src/**/*.html\n\n            [TestsChanged]\n            tests/**/*.ts\n\n  - job: build\n    displayName: Build only when code changes\n    dependsOn: check\n    condition: eq(dependencies.check.outputs['CheckChanges.CodeChanged'], 'true')\n    steps:\n        - # Add your build steps here\n        \n  - job: tests\n    displayName: Tests only when code changes or tests changes\n    dependsOn: check\n    condition: or(eq(dependencies.check.outputs['CheckChanges.CodeChanged'], 'true'), eq(dependencies.check.outputs['CheckChanges.TestsChanged'], 'true'))\n    steps:\n        - # Add your build steps here\n```\n\n## Multi-stage usage\n\n```yaml\nstages:\n  - stage: pre\n    jobs:\n      - job: check\n        displayName: Check changed files\n        pool:\n          vmImage: ubuntu-latest\n        steps:\n          - task: ChangedFiles@2\n            name: CheckChanges\n            inputs:\n              refBranch: main \n              rules: |\n                [BarChanged]\n                bar/**\n\n                [FooChanged]\n                foo/**\n\n  - stage: bar_has_changed\n    dependsOn: [\"pre\"]\n    displayName: This stage runs only when the `BarChanged` variable is true\n    condition: eq(dependencies.pre.outputs['check.CheckChanges.BarChanged'], 'true')\n    jobs: \n      - job: run\n        steps:\n           - # Add your build steps here\n\n  - stage: foo_has_changed\n    dependsOn: [\"pre\"]\n    displayName: This stage runs only when the `FooChanged` variable is true\n    condition: eq(dependencies.pre.outputs['check.CheckChanges.FooChanged'], 'true')\n    jobs: \n      - job: run\n        steps:\n           - # Add your build steps here\n           \n  - stage: stage_with_conditional_job\n    dependsOn: [\"pre\"]\n    displayName: The stage always runs but contains a job that runs only when `FooChanged` is true\n    jobs: \n      - job: job_when_foo_has_changed\n        displayName: This job runs only when `FooChanged` is true\n        condition: eq(stageDependencies.pre.check.outputs['CheckChanges.FooChanged'], 'true')\n        steps:\n          - # Add your build steps here\n```\n## Options\n\n* __rules__: Filter files to check changes for.  _Default:_ `**` _(match all files)_.\n* __variable__: The name of the default output variable to set to be available in next steps/jobs/stages. _Default:_ `HasChanged`.\n* __isOutput__: Are variables available in next stages?  _Default:_ `true`.\n* __refBranch__: The branch that will be used as reference to check changes in case multi-branches pipeline.\n* __cwd__: Change the current working directory. _Default:_ `$(System.DefaultWorkingDirectory)`\n* __verbose__: Enable verbose logging. _Default:_ `false`.\n\n## Troubleshooting\n\nIf you encounter the error:\n`fatal: ambiguous argument 'origin/{branch}...': unknown revision or path not in the working tree.`\n\nIt means that you should fetch the full depth of your git history to be sure to include all necessaries artifacts:\n\n```yaml\njobs: \n  - job: check\n    displayName: Check changed files\n    pool:\n        vmImage: ubuntu-latest\n    steps:\n      - checkout: self\n        fetchDepth: \"0\"\n        \n      - task: ChangedFiles@2\n        name: CheckChanges\n        inputs:\n          rules: src/**/*.ts\n          variable: HasChanged\n```\n\n## License\n\n[MIT](https://raw.githubusercontent.com/touchifyapp/vsts-changed-files/master/LICENSE)\n\n## Git tested changes\n\n* [x] git repo with only one branch or a pipeline for only one branch\n* [x] git create new branch without changes vs reference branch\n* [x] git push with single commit\n* [x] git push with several commits\n* [x] git repo with multiple branches and a pipline for multiple branches\n* [x] git merge a branch into another branch\n* [x] git cherry-pick\n* [x] git rebase and push force\n* [x] git revert\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftouchifyapp%2Fvsts-changed-files","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftouchifyapp%2Fvsts-changed-files","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftouchifyapp%2Fvsts-changed-files/lists"}