Team Ai
Datasetpublic

MegaBites-AI/Windows-powershell

sourceHugging Facemitupdated 6mo agoView on Hugging Face
0likes372downloads
action.yml118 linesDownload Raw Back to get-changed-files
1name: 'Get Changed Files'2description: 'Gets the list of files changed in a pull request or push event'3inputs:4  filter:5    description: 'Optional filter pattern (e.g., "*.md" for markdown files, ".github/" for GitHub files)'6    required: false7    default: ''8  event-types:9    description: 'Comma-separated list of event types to support (pull_request, push)'10    required: false11    default: 'pull_request'12outputs:13  files:14    description: 'JSON array of changed file paths'15    value: ${{ steps.get-files.outputs.files }}16  count:17    description: 'Number of changed files'18    value: ${{ steps.get-files.outputs.count }}19runs:20  using: 'composite'21  steps:22    - name: Get changed files23      id: get-files24      uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.025      with:26        script: |27          const eventTypes = '${{ inputs.event-types }}'.split(',').map(t => t.trim());28          const filter = '${{ inputs.filter }}';29          let changedFiles = [];30 31          if (eventTypes.includes('pull_request') && context.eventName === 'pull_request') {32            console.log(`Getting files changed in PR #${context.payload.pull_request.number}`);33 34            // Fetch all files changed in the PR with pagination35            let allFiles = [];36            let page = 1;37            let fetchedCount;38 39            do {40              const { data: files } = await github.rest.pulls.listFiles({41                owner: context.repo.owner,42                repo: context.repo.repo,43                pull_number: context.payload.pull_request.number,44                per_page: 100,45                page: page46              });47 48              allFiles = allFiles.concat(files);49              fetchedCount = files.length;50              page++;51            } while (fetchedCount === 100);52 53            if (allFiles.length >= 100) {54              console.log(`Note: This PR has ${allFiles.length} changed files. All files fetched using pagination.`);55            }56 57            changedFiles = allFiles58              .filter(file => file.status === 'added' || file.status === 'modified' || file.status === 'renamed')59              .map(file => file.filename);60 61          } else if (eventTypes.includes('push') && context.eventName === 'push') {62            console.log(`Getting files changed in push to ${context.ref}`);63 64            const { data: comparison } = await github.rest.repos.compareCommits({65              owner: context.repo.owner,66              repo: context.repo.repo,67              base: context.payload.before,68              head: context.payload.after,69            });70 71            changedFiles = comparison.files72              .filter(file => file.status === 'added' || file.status === 'modified' || file.status === 'renamed')73              .map(file => file.filename);74 75          } else {76            core.setFailed(`Unsupported event type: ${context.eventName}. Supported types: ${eventTypes.join(', ')}`);77            return;78          }79 80          // Apply filter if provided81          if (filter) {82            const filterLower = filter.toLowerCase();83            const beforeFilter = changedFiles.length;84            changedFiles = changedFiles.filter(file => {85              const fileLower = file.toLowerCase();86              // Support simple patterns like "*.md" or ".github/"87              if (filterLower.startsWith('*.')) {88                const ext = filterLower.substring(1);89                return fileLower.endsWith(ext);90              } else {91                return fileLower.startsWith(filterLower);92              }93            });94            console.log(`Filter '${filter}' applied: ${beforeFilter} → ${changedFiles.length} files`);95          }96 97          // Calculate simple hash for verification98          const crypto = require('crypto');99          const filesJson = JSON.stringify(changedFiles.sort());100          const hash = crypto.createHash('sha256').update(filesJson).digest('hex').substring(0, 8);101 102          // Log changed files in a collapsible group103          core.startGroup(`Changed Files (${changedFiles.length} total, hash: ${hash})`);104          if (changedFiles.length > 0) {105            changedFiles.forEach(file => console.log(`  - ${file}`));106          } else {107            console.log('  (no files changed)');108          }109          core.endGroup();110 111          console.log(`Found ${changedFiles.length} changed files`);112          core.setOutput('files', JSON.stringify(changedFiles));113          core.setOutput('count', changedFiles.length);114 115branding:116  icon: 'file-text'117  color: 'blue'118