[Lint] Enable whitespace and permission bit hooks #565
Workflow file for this run
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: Dist | |
| on: | |
| workflow_dispatch: | |
| schedule: | |
| # gemini said this is 6:00 china time | |
| - cron: "0 22 * * *" | |
| pull_request: | |
| types: | |
| - opened | |
| - synchronize | |
| - reopened | |
| - ready_for_review | |
| paths: | |
| - setup.py | |
| - setup.cfg | |
| - pyproject.toml | |
| - MANIFEST.in | |
| - CMakeLists.txt | |
| - version_provider.py | |
| - .github/workflows/dist.yml | |
| release: | |
| types: | |
| - published | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: "${{ github.workflow }}-${{ github.ref }}" | |
| cancel-in-progress: true | |
| env: | |
| PYTHONDEVMODE: "1" | |
| PYTHONUNBUFFERED: "1" | |
| COLUMNS: "100" | |
| FORCE_COLOR: "1" | |
| CLICOLOR_FORCE: "1" | |
| jobs: | |
| build-sdist: | |
| name: Build SDist | |
| if: | | |
| github.repository_owner == 'tile-ai' && | |
| (github.event_name != 'pull_request' || !github.event.pull_request.draft) | |
| runs-on: macos-latest | |
| timeout-minutes: 30 | |
| env: | |
| # `NO_VERSION_LABEL=ON` disables embedding the toolchain / git commit hash in version metadata. | |
| # Otherwise, the version of the SDist has a git hash suffix (e.g., 0.1.0+gitabcdef12), | |
| # but the package built from the SDist has no way to get the git hash (it is not a git repo), | |
| # leading to inconsistent versions between SDist and built packages (+gitabcdef12 vs. +gitunknown). | |
| NO_VERSION_LABEL: 'ON' | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 1 | |
| submodules: recursive | |
| - name: Setup Python and uv with caching | |
| id: setup-uv | |
| uses: astral-sh/setup-uv@v7 | |
| with: | |
| python-version: "3.12" | |
| activate-environment: true | |
| - name: Build SDist | |
| run: | | |
| uv run --no-project --with=build -m -- build --sdist --outdir=dist | |
| - name: Setup ccache | |
| uses: hendrikmuhs/ccache-action@v1 | |
| with: | |
| create-symlink: true | |
| evict-old-files: "7d" | |
| append-timestamp: false | |
| key: sdist-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('**/*.cc') }} | |
| restore-keys: | | |
| sdist-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('**/*.cc') }} | |
| sdist-${{ runner.os }}-${{ runner.arch }} | |
| ${{ runner.os }}-${{ runner.arch }} | |
| - name: Test SDist buildable | |
| run: | | |
| TEMP_DIR="$(mktemp -d -t tilelang-sdist-test)" | |
| cp -r dist "${TEMP_DIR}/dist" | |
| cd "${TEMP_DIR}" | |
| uv pip install -v dist/*.tar.gz | |
| python3 -c "import tilelang; print(tilelang.__version__)" | |
| - name: Upload SDist | |
| # Not PR to save artifact storage, as SDist is only needed for releases. | |
| if: github.event_name != 'pull_request' || contains(github.event.pull_request.title, '[Release]') | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: sdist | |
| path: dist/*.tar.gz | |
| if-no-files-found: error | |
| build-wheels: | |
| name: Build wheels for Python ${{ matrix.python-version }} on ${{ matrix.target.runner }} with ${{ matrix.target.toolkit }} | |
| if: | | |
| github.repository_owner == 'tile-ai' && | |
| (github.event_name != 'pull_request' || !github.event.pull_request.draft) | |
| strategy: | |
| matrix: | |
| target: | |
| - { runner: ubuntu-latest, toolkit: "CUDA-12.8" } | |
| - { runner: ubuntu-24.04-arm, toolkit: "CUDA-12.8" } | |
| - { runner: macos-latest, toolkit: "Metal" } | |
| python-version: | |
| # Wheels are built with Python 3.8 Limited API, they should work with all Python >= 3.8. | |
| # Only build wheels against Python 3.8 Limited API to save CI resources. | |
| - "3.9" | |
| fail-fast: false | |
| timeout-minutes: 120 | |
| runs-on: ${{ matrix.target.runner }} | |
| env: | |
| NO_VERSION_LABEL: ${{ github.event_name == 'release' && 'OFF' || 'ON' }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 1 | |
| submodules: recursive | |
| - name: Setup ccache | |
| uses: hendrikmuhs/ccache-action@v1 | |
| with: | |
| create-symlink: true | |
| evict-old-files: "7d" | |
| append-timestamp: false | |
| key: wheel-${{ runner.os }}-${{ runner.arch }}-${{ matrix.target.toolkit }}-${{ hashFiles('**/*.cc') }} | |
| restore-keys: | | |
| wheel-${{ runner.os }}-${{ runner.arch }}-${{ matrix.target.toolkit }}-${{ hashFiles('**/*.cc') }} | |
| wheel-${{ runner.os }}-${{ runner.arch }}-${{ matrix.target.toolkit }} | |
| wheel-${{ runner.os }}-${{ runner.arch }} | |
| ${{ runner.os }}-${{ runner.arch }}-${{ matrix.target.toolkit }} | |
| ${{ runner.os }}-${{ runner.arch }} | |
| - name: Set CIBW_BUILD | |
| run: | | |
| PYTHON_VERSION="${{ matrix.python-version }}" | |
| PYTHON_VERSION_MAJMIN="$(echo "${PYTHON_VERSION}" | cut -d '.' -f-2)" | |
| PYTHON_VERSION_MAJMIN_NODOT="${PYTHON_VERSION_MAJMIN//./}" | |
| echo "CIBW_BUILD=cp${PYTHON_VERSION_MAJMIN_NODOT}-*" | tee -a "${GITHUB_ENV}" | |
| if [[ "${{ matrix.target.toolkit }}" == *"CUDA"* ]]; then | |
| CUDA_VERSION="${{ matrix.target.toolkit }}" | |
| CUDA_VERSION="${CUDA_VERSION#CUDA-}" | |
| echo "CUDA_VERSION=${CUDA_VERSION}" | tee -a "${GITHUB_ENV}" | |
| fi | |
| if [[ "${{ runner.os }}" == "Linux" ]]; then | |
| HOST_CCACHE_DIR="$(ccache --get-config cache_dir)" | |
| echo "CIBW_BEFORE_BUILD_LINUX=yum install -y ccache && ccache -o cache_dir=/host${HOST_CCACHE_DIR}" | tee -a "${GITHUB_ENV}" | |
| fi | |
| - name: Build wheels | |
| uses: pypa/[email protected] | |
| with: | |
| package-dir: . | |
| output-dir: wheelhouse | |
| config-file: "{package}/pyproject.toml" | |
| - name: Upload wheels | |
| # Not PR to save artifact storage, as wheels are only needed for releases. | |
| if: github.event_name != 'pull_request' || contains(github.event.pull_request.title, '[Release]') | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: wheels-${{ matrix.python-version }}-${{ runner.os }}-${{ runner.arch }}-${{ matrix.target.toolkit }} | |
| path: wheelhouse/*.whl | |
| if-no-files-found: error | |
| list-artifacts: | |
| name: List artifacts | |
| # Not PR to save artifact storage, as artifacts are only needed for releases. | |
| if: github.event_name != 'pull_request' || contains(github.event.pull_request.title, '[Release]') | |
| runs-on: ubuntu-latest | |
| needs: [build-sdist, build-wheels] | |
| timeout-minutes: 15 | |
| steps: | |
| - name: Download built SDist | |
| uses: actions/download-artifact@v7 | |
| with: | |
| # unpacks default artifact into dist/ | |
| # if `name: artifact` is omitted, the action will create extra parent dir | |
| name: sdist | |
| path: dist | |
| - name: Download built wheels | |
| uses: actions/download-artifact@v7 | |
| with: | |
| pattern: wheels-* | |
| path: dist | |
| merge-multiple: true | |
| - name: List distributions | |
| run: ls -lh dist/* | |
| - name: Upload artifacts | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: artifacts | |
| path: dist/* | |
| if-no-files-found: error |