Skip to content

tj-actions/verify-changed-files

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

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Ubuntu Mac OS Windows Public workflows that use this action.

Codacy Badge CI Update release version.

All Contributors

verify-changed-files

Verify that certain files or directories did or did not change during the workflow execution.

Note

  • This action only detects files that have pending uncommitted changes generated during the workflow execution, for running a specific step when a file changes in a pull request or based on a pushed commit

    See: https://github.com/tj-actions/changed-files instead

Features

  • Fast execution (0-2 seconds on average).
  • Easy to debug.
  • Scales to large repositories.
  • Supports all platforms (Linux, MacOS, Windows).
  • GitHub-hosted runners support
  • GitHub Enterprise Server support.
  • self-hosted runners support.
  • Boolean output for detecting uncommitted changes.
  • List all files that changed during the workflow execution.
  • Detect changes to track and untracked files.
  • Restrict change detection to a subset of files:
    • Using Glob pattern matching.
      • Supports Globstar.
      • Supports brace expansion.
      • Supports negation.

Usage

...
    steps:
      - uses: actions/checkout@v4

      - name: Change text file
        run: |
          echo "Modified" > new.txt

      - name: Change file in directory
        run: |
          echo "Changed" > test_directory/new.txt

      - name: Verify Changed files
        uses: tj-actions/verify-changed-files@v19
        id: verify-changed-files
        with:
          files: |
             *.txt
             test_directory
             action.yml
             **/*.{jpeg,py}
             !*.sql

      - name: Run step only when any of the above files change.
        if: steps.verify-changed-files.outputs.files_changed == 'true'
        env:
          CHANGED_FILES: ${{ steps.verify-changed-files.outputs.changed_files }}
        run: |
          echo "Changed files: $CHANGED_FILES"
        # Outputs: "Changed files: new.txt test_directory/new.txt"

Using the contains function.

...
      - name: Verify Changed files
        uses: tj-actions/verify-changed-files@v19
        id: verify-changed-files
        with:
          files: |
             new.txt
             test_directory

      - name: Perform action when test_directory changes
        if: contains(steps.verify-changed-files.outputs.changed_files, 'test_directory')
        run: |
          echo "test_directory has changed."

Get all unstaged (tracked/untracked) files

...
      - name: Verify Changed files
        uses: tj-actions/verify-changed-files@v19
        id: verify-changed-files
      
      - name: List all changed tracked and untracked files
        env:
          CHANGED_FILES: ${{ steps.verify-changed-files.outputs.changed_files }}
        run: |
          echo "Changed files: $CHANGED_FILES"

If you feel generous and want to show some extra appreciation:

Support this project with a ⭐

Buy me a coffee

Inputs

- uses: tj-actions/verify-changed-files@v19
  id: verify-changed-files
  with:
    # Indicates whether to fail if files have changed.
    # Type: boolean
    # Default: "false"
    fail-if-changed: ''

    # Message to display when files have changed and the 
    # `fail-if-changed` input is set to `true`. 
    # Type: string
    # Default: "Files have changed."
    fail-message: ''

    # File/Directory names to check for uncommited changes.
    # Type: string
    files: ''

    # Separator used to split the `files` input
    # Type: string
    # Default: "\n"
    files-separator: ''

    # Indicates whether to match files in `.gitignore`
    # Type: boolean
    # Default: "false"
    match-gitignore-files: ''

    # Relative path under GITHUB_WORKSPACE to the repository
    # Type: string
    # Default: "."
    path: ''

    # Use non-ASCII characters to match files and output the 
    # filenames completely verbatim by setting this to `false` 
    # Type: boolean
    # Default: "true"
    quotepath: ''

    # Apply sanitization to output filenames before being set as 
    # output. 
    # Type: boolean
    # Default: "true"
    safe_output: ''

    # Output string separator.
    # Type: string
    # Default: " "
    separator: ''

Outputs

OUTPUT TYPE DESCRIPTION
changed_files string List of changed files
files_changed string Boolean indicating that files have
changed.

Known Limitation

Warning

  • Using characters like \n, %, . and \r as output string separators would be URL encoded

Report Bugs

Report bugs at https://github.com/tj-actions/verify-changed-files/issues.

If you are reporting a bug, please include:

  • Your operating system name and version.
  • Any details about your workflow that might be helpful in troubleshooting.
  • Detailed steps to reproduce the bug.

Contributors ✨

Thanks goes to these wonderful people (emoji key):

Max Kahnt
Max Kahnt

πŸ“–
William Killerud
William Killerud

πŸ’»
Minecraftschurli
Minecraftschurli

πŸ’» πŸ“– ⚠️
Stefan Hoth
Stefan Hoth

πŸ’»
Raphael Boidol
Raphael Boidol

πŸ“–

This project follows the all-contributors specification. Contributions of any kind welcome!