name: Python Test on: push: branches: [main] pull_request: branches: [main] env: UV_SYSTEM_PYTHON: 1 jobs: test: runs-on: ubuntu-latest strategy: matrix: python-version: ["3.10", "3.11", "3.12"] steps: - name: Checkout PR with full history uses: actions/checkout@v4 with: fetch-depth: 0 - name: Install uv uses: astral-sh/setup-uv@v6 with: enable-cache: true cache-dependency-glob: "pyproject.toml" - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: bash scripts/install-linux.sh - name: List dependencies run: pip list - name: Login to Hugging Face env: HF_TOKEN: ${{ secrets.HF_TOKEN_READ_ONLY }} run: huggingface-cli login --token $HF_TOKEN - name: Run tests env: PREFECT_API_KEY: ${{ secrets.PREFECT_API_KEY }} PREFECT_API_URL: ${{ secrets.PREFECT_API_URL }} run: pytest -vra -n 5 --dist=loadscope tests - name: Squash commits and trial push to Hugging Face if: github.event_name == 'pull_request' id: trial_push env: HF_TOKEN: ${{ secrets.HF_TOKEN }} TRIAL_BRANCH: trial-sync-${{ github.sha }}-${{ matrix.python-version }} run: | # Configure Git user identity git config user.name "github-actions[ci]" git config user.email "github-actions[ci]@users.noreply.github.com" # Install Git LFS sudo apt-get update sudo apt-get install -y git-lfs git lfs install # Configure LFS tracking for binary files (only for HF push) git lfs track "*.pdf" git lfs track "*.png" git add .gitattributes # Setup LFS for the remote git lfs fetch git lfs checkout # Rebase and squash all PR commits into one BASE=$(git merge-base origin/main HEAD) git reset --soft $BASE # Re-add all files (binary files will now be tracked by LFS) git add . git commit -m "Squashed commit from PR #${{ github.event.pull_request.number }}" # Create a new orphan branch (no history) git checkout --orphan hf-clean git add . git commit -m "Clean sync from main branch - $(date '+%Y-%m-%d %H:%M:%S')" # Push to temporary branch on Hugging Face git push -f https://HF_USERNAME:$HF_TOKEN@huggingface.co/spaces/atomind/mlip-arena HEAD:refs/heads/$TRIAL_BRANCH - name: Delete trial branch from Hugging Face if: steps.trial_push.outcome == 'success' env: HF_TOKEN: ${{ secrets.HF_TOKEN }} TRIAL_BRANCH: trial-sync-${{ github.sha }}-${{ matrix.python-version }} run: | git push https://HF_USERNAME:$HF_TOKEN@huggingface.co/spaces/atomind/mlip-arena --delete $TRIAL_BRANCH || true