diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yaml similarity index 100% rename from .github/workflows/codeql.yml rename to .github/workflows/codeql.yaml diff --git a/.github/workflows/python-publish.yaml b/.github/workflows/python-publish.yaml new file mode 100644 index 0000000..8ff15c4 --- /dev/null +++ b/.github/workflows/python-publish.yaml @@ -0,0 +1,75 @@ +# This workflow will upload a Python Package to PyPI when a release is created +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python#publishing-to-package-registries + +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. + +name: Upload Python Package + +on: + release: + types: [published] + +permissions: + contents: read + +jobs: + release-build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: actions/setup-python@v5 + with: + python-version: "3.x" + + - name: Build release distributions + run: | + # NOTE: put your own distribution build steps here. + python -m pip install build cibuildwheel + cibuildwheel --output-dir dist/ + + - name: Upload distributions + uses: actions/upload-artifact@v4 + with: + name: release-dists + path: dist/ + + pypi-publish: + runs-on: ubuntu-latest + needs: + - release-build + permissions: + # IMPORTANT: this permission is mandatory for trusted publishing + id-token: write + + # Dedicated environments with protections for publishing are strongly recommended. + # For more information, see: https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#deployment-protection-rules + environment: + name: pypi + # OPTIONAL: uncomment and update to include your PyPI project URL in the deployment status: + # url: https://pypi.org/p/YOURPROJECT + # + # ALTERNATIVE: if your GitHub Release name is the PyPI project version string + # ALTERNATIVE: exactly, uncomment the following line instead: + # url: https://pypi.org/project/YOURPROJECT/${{ github.event.release.name }} + url: https://pypi.org/project/mattersim/${{ github.event.release.name }} + + steps: + - name: Retrieve release distributions + uses: actions/download-artifact@v4 + with: + name: release-dists + path: dist/ + + - name: Publish release distributions to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + packages-dir: dist/ + password: ${{ secrets.PYPI_TOKEN }} + repository-url: https://upload.pypi.org/legacy/ diff --git a/pyproject.toml b/pyproject.toml index 965ea67..7b5a21e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,10 +1,10 @@ [build-system] -requires = ["setuptools>=45", "wheel", "Cython>=0.29.32", "numpy<2"] +requires = ["setuptools>=45", "wheel", "Cython>=0.29.32", "numpy<2", "setuptools_scm"] build-backend = "setuptools.build_meta" [project] name = "mattersim" -version = "1.0.0" +dynamic = ["version"] description = "MatterSim: A Deep Learning Atomistic Model Across Elements, Temperatures and Pressures." authors = [ {name = "Han Yang", email = "hanyang@microsoft.com"}, @@ -74,3 +74,15 @@ package-dir = {"" = "src"} [tool.setuptools.packages.find] where = ["src"] include = ["mattersim", "mattersim.*"] + +[tool.setuptools_scm] +version_scheme = "guess-next-dev" +local_scheme = "dirty-tag" + +[tool.cibuildwheel] +# Limit the build to Python 3.9 +build = "cp39-*" +# Limit the build to manylinux +manylinux-x86_64-image = "manylinux2014" +# Include pure Python (none) wheels +skip = "pp*,cp3{6,7,8,10,11}-*,*win*,*macos*"