Fix doc (#41457) #20
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Slow tests on important models (on Push - A10) | |
on: | |
push: | |
branches: [ main ] | |
jobs: | |
get_modified_models: | |
name: "Get all modified files" | |
runs-on: ubuntu-latest | |
outputs: | |
matrix: ${{ steps.set-matrix.outputs.matrix }} | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
- name: Get changed files using `actions/github-script` | |
id: get-changed-files | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
let files = []; | |
// Only handle push events | |
if (context.eventName === 'push') { | |
const afterSha = context.payload.after; | |
const branchName = context.payload.ref.replace('refs/heads/', ''); | |
let baseSha; | |
if (branchName === 'main') { | |
console.log('Push to main branch, comparing to parent commit'); | |
// Get the parent commit of the pushed commit | |
const { data: commit } = await github.rest.repos.getCommit({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
ref: afterSha | |
}); | |
baseSha = commit.parents[0]?.sha; | |
if (!baseSha) { | |
throw new Error('No parent commit found for the pushed commit'); | |
} | |
} else { | |
console.log(`Push to branch ${branchName}, comparing to main`); | |
baseSha = 'main'; | |
} | |
const { data: comparison } = await github.rest.repos.compareCommits({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
base: baseSha, | |
head: afterSha | |
}); | |
// Include added, modified, and renamed files | |
files = comparison.files | |
.filter(file => file.status === 'added' || file.status === 'modified' || file.status === 'renamed') | |
.map(file => file.filename); | |
} | |
// Include all files under src/transformers/ (not just models subdirectory) | |
const filteredFiles = files.filter(file => | |
file.startsWith('src/transformers/') | |
); | |
core.setOutput('changed_files', filteredFiles.join(' ')); | |
core.setOutput('any_changed', filteredFiles.length > 0 ? 'true' : 'false'); | |
- name: Parse changed files with Python | |
if: steps.get-changed-files.outputs.any_changed == 'true' | |
env: | |
CHANGED_FILES: ${{ steps.get-changed-files.outputs.changed_files }} | |
id: set-matrix | |
run: | | |
python3 - << 'EOF' | |
import os | |
import sys | |
import json | |
# Add the utils directory to Python path | |
sys.path.insert(0, 'utils') | |
# Import the important models list | |
from important_files import IMPORTANT_MODELS | |
print(f"Important models: {IMPORTANT_MODELS}") | |
# Get the changed files from the previous step | |
changed_files_str = os.environ.get('CHANGED_FILES', '') | |
changed_files = changed_files_str.split() if changed_files_str else [] | |
# Filter to only Python files | |
python_files = [f for f in changed_files if f.endswith('.py')] | |
print(f"Python files changed: {python_files}") | |
result_models = set() | |
# Specific files that trigger all models | |
transformers_utils_files = [ | |
'modeling_utils.py', | |
'modeling_rope_utils.py', | |
'modeling_flash_attention_utils.py', | |
'modeling_attn_mask_utils.py', | |
'cache_utils.py', | |
'masking_utils.py', | |
'pytorch_utils.py' | |
] | |
# Single loop through all Python files | |
for file in python_files: | |
# Check for files under src/transformers/models/ | |
if file.startswith('src/transformers/models/'): | |
remaining_path = file[len('src/transformers/models/'):] | |
if '/' in remaining_path: | |
model_dir = remaining_path.split('/')[0] | |
if model_dir in IMPORTANT_MODELS: | |
result_models.add(model_dir) | |
print(f"Added model directory: {model_dir}") | |
# Check for specific files under src/transformers/ or src/transformers/generation/ files | |
elif file.startswith('src/transformers/generation/') or \ | |
(file.startswith('src/transformers/') and os.path.basename(file) in transformers_utils_files): | |
print(f"Found core file: {file} - including all important models") | |
result_models.update(IMPORTANT_MODELS) | |
break # No need to continue once we include all models | |
# Convert to sorted list and create matrix | |
result_list = sorted(list(result_models)) | |
print(f"Final model list: {result_list}") | |
if result_list: | |
matrix_json = json.dumps(result_list) | |
print(f"matrix={matrix_json}") | |
# Write to GITHUB_OUTPUT | |
with open(os.environ['GITHUB_OUTPUT'], 'a') as f: | |
f.write(f"matrix={matrix_json}\n") | |
else: | |
print("matrix=[]") | |
with open(os.environ['GITHUB_OUTPUT'], 'a') as f: | |
f.write("matrix=[]\n") | |
EOF | |
model-ci: | |
name: Model CI | |
uses: ./.github/workflows/self-scheduled.yml | |
needs: get_modified_models | |
if: needs.get_modified_models.outputs.matrix != '' && needs.get_modified_models.outputs.matrix != '[]' | |
with: | |
job: run_models_gpu | |
slack_report_channel: "#transformers-ci-push" | |
docker: huggingface/transformers-all-latest-gpu | |
ci_event: push | |
report_repo_id: hf-internal-testing/transformers_ci_push | |
commit_sha: ${{ github.sha }} | |
models: ${{ needs.get_modified_models.outputs.matrix }} | |
secrets: inherit |