diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build_docs_main.yml similarity index 72% rename from .github/workflows/build-docs.yml rename to .github/workflows/build_docs_main.yml index 97a9cff..7f9d9dc 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build_docs_main.yml @@ -1,10 +1,10 @@ -name: Building docs +name: Build Latest Docs on: - push: - branches: [ "main" ] - pull_request: - branches: [ "main" ] + workflow_run: + workflows: ["Test TrajDL on branch main"] + types: + - completed jobs: build: @@ -18,22 +18,25 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Install build-essential and make - run: | - sudo apt-get update - sudo apt-get install -y build-essential ca-certificates curl libffi-dev libgdbm-dev libncurses5-dev libnss3-dev libreadline-dev libssl-dev make time wget zlib1g-dev - - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} cache: 'pip' - - name: Install PyTorch and dependencies from pyproject.toml + - name: Download all artifacts + uses: actions/download-artifact@v4 + with: + name: dist-${{ github.ref_name }}-${{ github.sha }}-${{ matrix.python-version }} + path: dist + run-id: ${{ github.event.workflow_run.id }} + github-token: ${{ secrets.PAT_FOR_ARTIFACTS }} + + - name: Install TrajDL run: | python -m pip install --upgrade pip python -m pip install torch --index-url https://download.pytorch.org/whl/cpu - python -m pip install .[dev,docs] + python -m pip install "dist/trajdl-0.1.0-cp312-cp312-linux_x86_64.whl[docs]" - name: Cache datasets id: cache-datasets @@ -42,13 +45,6 @@ jobs: path: ~/.cache/trajdl key: trajdl-cache-datasets - - name: Test with pytest - run: | - autoflake -j 0 --remove-all-unused-imports --in-place --recursive --ignore-init-module-imports . - isort -j -1 . - black . - pytest -s - - name: Build docs run: | cd docs && make -j 4 html && cd .. diff --git a/.github/workflows/build_docs_vtag.yml b/.github/workflows/build_docs_vtag.yml new file mode 100644 index 0000000..e9b1037 --- /dev/null +++ b/.github/workflows/build_docs_vtag.yml @@ -0,0 +1,77 @@ +name: Build v Docs and Publish + +on: + workflow_run: + workflows: ["Test TrajDL on tag v"] + types: + - completed + +jobs: + build: + runs-on: ubuntu-latest + + environment: + name: testpypi + url: https://test.pypi.org/p/trajdl + + permissions: + contents: write # IMPORTANT: mandatory for making GitHub Releases + id-token: write # IMPORTANT: mandatory for sigstore + + strategy: + fail-fast: false + matrix: + python-version: ["3.12"] + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + cache: 'pip' + + - name: Download all artifacts + uses: actions/download-artifact@v4 + with: + path: dist + name: dist-${{ github.event.workflow_run.head_branch }}-${{ github.sha }} + run-id: ${{ github.event.workflow_run.id }} + github-token: ${{ secrets.PAT_FOR_ARTIFACTS }} + + - name: Sign the dists with Sigstore + uses: sigstore/gh-action-sigstore-python@v3.0.0 + with: + inputs: >- + ./dist/*.tar.gz + ./dist/*.whl + + - name: Create GitHub Release + env: + GITHUB_TOKEN: ${{ secrets.PAT_FOR_RELEASE }} + run: >- + gh release create + '${{ github.event.workflow_run.head_branch }}' + --repo '${{ github.repository }}' + --notes "" + + - name: Upload artifact signatures to GitHub Release + env: + GITHUB_TOKEN: ${{ secrets.PAT_FOR_RELEASE }} + # Upload to GitHub Release using the `gh` CLI. + # `dist/` contains the built packages, and the + # sigstore-produced signatures and certificates. + run: >- + gh release upload + '${{ github.event.workflow_run.head_branch }}' dist/** + --repo '${{ github.repository }}' + + - name: Publish to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + repository-url: https://test.pypi.org/legacy/ + user: __token__ + password: ${{ secrets.TEST_PYPI_API_TOKEN }} + packages_dir: dist/ + skip_existing: true \ No newline at end of file diff --git a/.github/workflows/build_wheels_for_vtag.yml b/.github/workflows/build_wheels_for_vtag.yml new file mode 100644 index 0000000..4b2c5d9 --- /dev/null +++ b/.github/workflows/build_wheels_for_vtag.yml @@ -0,0 +1,127 @@ +name: Test TrajDL on tag v + +on: + push: + tags: + - 'v*' + +jobs: + build_wheels: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest] + + steps: + - uses: actions/checkout@v4 + + - uses: pypa/cibuildwheel@v2.22 + + - name: Check wheels + run: | + ls wheelhouse + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: dist-${{ github.ref_name }}-${{ github.sha }}-wheel + path: wheelhouse/*.whl + retention-days: 1 + overwrite: true + + test_wheels_and_build_sdist: + needs: [build_wheels] + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + python-version: ["3.10", "3.11", "3.12"] + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + cache: 'pip' + + - name: Download all artifacts + uses: actions/download-artifact@v4 + with: + name: dist-${{ github.ref_name }}-${{ github.sha }}-wheel + path: dist + github-token: ${{ secrets.PAT_FOR_ARTIFACTS }} + + - name: Install TrajDL + run: | + python -m pip install --upgrade pip + python -m pip install torch --index-url https://download.pytorch.org/whl/cpu + PYTHON_VERSION=${{ matrix.python-version }} + PYTHON_VERSION_NO_DOT="${PYTHON_VERSION/./}" + python -m pip install "dist/trajdl-0.1.0-cp${PYTHON_VERSION_NO_DOT}-cp${PYTHON_VERSION_NO_DOT}-manylinux_2_17_x86_64.manylinux2014_x86_64.whl[dev,docs]" + + - name: Cache datasets + id: cache-datasets + uses: actions/cache@v3 + with: + path: ~/.cache/trajdl + key: trajdl-cache-datasets + + - name: Test with pytest + run: | + pytest -s + + - name: Build docs + if: matrix.python-version == '3.12' + run: | + cd docs && make -j 4 html && cd .. + + - name: Get branch name + if: matrix.python-version == '3.12' + id: branch-name + run: echo "branch=${GITHUB_REF#refs/heads/}" >> $GITHUB_OUTPUT + + - name: Checkout documentation repository + if: matrix.python-version == '3.12' + uses: actions/checkout@v3 + with: + repository: Spatial-Temporal-Data-Mining/TrajDL-docs + token: ${{ secrets.PAT_FOR_DOCS }} + path: docs-repo + fetch-depth: 0 # 获取所有分支信息 + + - name: Deploy to documentation repository + if: matrix.python-version == '3.12' + run: | + cd docs-repo + git config user.name "GitHub Actions" + git config user.email "actions@github.com" + + git checkout -b ${{ github.ref_name }} || git checkout ${{ github.ref_name }} + + # 复制文档 + rm -rf * # 清空当前分支内容 + cp -r ../docs/build/html/ . + cp ../.readthedocs.yaml . + + # 提交更改 + git add . + git commit -m "Update documentation from source repository" || echo "No changes to commit" + git push origin ${{ github.ref_name }} + cd .. + + - name: Build SDist + if: matrix.python-version == '3.12' + run: | + python -m build --sdist + + - name: Upload artifacts + if: matrix.python-version == '3.12' + uses: actions/upload-artifact@v4 + with: + name: dist-${{ github.ref_name }}-${{ github.sha }} + path: dist/ + retention-days: 1 + overwrite: true diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml deleted file mode 100644 index 7060eef..0000000 --- a/.github/workflows/python-publish.yml +++ /dev/null @@ -1,75 +0,0 @@ -name: Build and Publish - -on: - workflow_run: - workflows: ["Building docs"] - types: - - completed - -jobs: - build-and-publish: - runs-on: ubuntu-latest - strategy: - matrix: - python-version: ['3.10', '3.11', '3.12'] - - steps: - - uses: actions/checkout@v3 - - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python-version }} - - - name: Install build-essential and make - run: | - sudo apt-get update - sudo apt-get install -y build-essential ca-certificates curl libffi-dev libgdbm-dev libncurses5-dev libnss3-dev libreadline-dev libssl-dev make time wget zlib1g-dev - - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - cache: 'pip' - - - name: Install PyTorch and dependencies from pyproject.toml - run: | - python -m pip install --upgrade pip - python -m pip install torch --index-url https://download.pytorch.org/whl/cpu - python -m pip install .[dev,docs] - - - name: Build package - run: | - python -m build - - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: dist-${{ matrix.python-version }} - path: dist/ - retention-days: 1 - overwrite: true - - publish: - needs: build-and-publish - runs-on: ubuntu-latest - - steps: - - name: Download all artifacts - uses: actions/download-artifact@v4 - with: - path: dist - - - name: Prepare distribution files - run: | - mkdir -p final_dist - cp -r dist/*/* final_dist/ - ls final_dist - - # - name: Publish to PyPI - # uses: pypa/gh-action-pypi-publish@release/v1 - # with: - # user: __token__ - # password: ${{ secrets.PYPI_API_TOKEN }} - # packages_dir: final_dist/ - # skip_existing: true diff --git a/.github/workflows/python-package-test.yml b/.github/workflows/test_trajdl_main.yml similarity index 71% rename from .github/workflows/python-package-test.yml rename to .github/workflows/test_trajdl_main.yml index 6d73ecd..e99865e 100644 --- a/.github/workflows/python-package-test.yml +++ b/.github/workflows/test_trajdl_main.yml @@ -1,13 +1,12 @@ -# This workflow will install Python dependencies, run tests and lint with a variety of Python versions -# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python - -name: Python package +name: Test TrajDL on branch main on: push: - branches: [ "main" ] + branches: + - main pull_request: - branches: [ "main" ] + branches: + - main jobs: build: @@ -51,3 +50,18 @@ jobs: isort -j -1 . black . pytest -s + + - name: Build package + run: | + if [ "${{ matrix.python-version }}" = "3.12" ]; then + python -m build + fi + + - name: Upload artifacts + if: matrix.python-version == '3.12' + uses: actions/upload-artifact@v4 + with: + name: dist-${{ github.ref_name }}-${{ github.sha }}-${{ matrix.python-version }} + path: dist/ + retention-days: 1 + overwrite: true diff --git a/pyproject.toml b/pyproject.toml index d02efab..36c1fd9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ build-backend = "scikit_build_core.build" name = "trajdl" description = "A python toolbox for Trajectory Deep Learning." readme = "README.md" -version = "0.1.0" +version = "0.1.0.dev3" license.file = "LICENSE" authors = [ { name = "Chao Song", email = "davidchaosong@outlook.com" }, @@ -16,7 +16,7 @@ maintainers = [ { name = "Chao Song", email = "davidchaosong@outlook.com" }, { name = "Chaoqun Feng", email = "fengchaoqun.fcq@gmail.com" }, ] -requires-python = ">=3.10" +requires-python = ">=3.10,<3.13" dependencies = [ "scikit-learn>=1.3.2", @@ -88,3 +88,13 @@ docs = [ # pytest configuration [tool.pytest.ini_options] addopts = "-p no:warnings --cov=trajdl --cov-report html --durations=10" + +[tool.scikit-build] +wheel.expand-macos-universal-tags = true + +[tool.cibuildwheel] +build-frontend = "build[uv]" +build = "cp310-manylinux_x86_64 cp311-manylinux_x86_64 cp312-manylinux_x86_64" + +[tool.cibuildwheel.pyodide] +build-frontend = {name = "build", args = ["--exports", "whole_archive"]} \ No newline at end of file