diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 007e59ec..e9a8122f 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -1,77 +1,34 @@ -# This workflow will install Python dependencies, run tests and lint with a variety of Python versions -# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions - name: Python package - on: push: branches: [ master ] tags: '*' pull_request: branches: [ master ] - jobs: - build: - - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-latest, macos-latest, windows-latest] - python-version: ["3.11", "3.12", "3.13"] - + build-python-package: + uses: nion-software/github-workflows/.github/workflows/build-python-package.yml@main + secrets: + anaconda-token: ${{ secrets.ANACONDA_TOKEN }} + pypi-publish: + name: Upload release to PyPI + needs: [build-python-package] + runs-on: ubuntu-latest + if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') + environment: release + permissions: + id-token: write # IMPORTANT: this permission is mandatory for trusted publishing steps: - - uses: actions/checkout@v4 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - - name: Display Python version - run: python -c "import sys; print(sys.version)" - - name: Build Distribution - run: | - python -m pip install --upgrade pip - python -m pip install build - python -m build - - name: Install Test Dependencies - run: | - pip install -r test-requirements.txt - python -m pip install mypy - mypy --version - - name: Type Checking - run: | - python -m pip install types-pytz types-tzlocal types-setuptools - mypy --install-types --non-interactive --namespace-packages --ignore-missing-imports --strict --exclude '/test' -p nion.swift - - name: Test + - name: Download All Artifacts + uses: actions/download-artifact@v4 + - name: Copy files to upload to PyPI to dist. + shell: bash run: | - python -m unittest discover -s nion/swift -p '*_test.py' - - name: Upload Artifacts - uses: actions/upload-artifact@v4 - if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.11' - with: - name: distribution - path: dist - - name: Publish package to PyPI + mkdir dist + find . -name "*.whl" -exec cp {} dist \; + ls -lR . + - name: Publish package distributions to PyPI uses: pypa/gh-action-pypi-publish@release/v1 - if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') && matrix.os == 'ubuntu-latest' && matrix.python-version == '3.11' with: skip-existing: true - user: __token__ - password: ${{ secrets.pypi_password }} - - name: Set up Miniconda for conda-build - if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') && matrix.os == 'ubuntu-latest' && matrix.python-version == '3.11' - uses: conda-incubator/setup-miniconda@v3 - with: - auto-update-conda: true - python-version: '3.11' - - name: Build/publish anaconda package - if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') && matrix.os == 'ubuntu-latest' && matrix.python-version == '3.11' - shell: bash -l {0} - run: | - # make a directory to avoid name conflicts with the channel. argh. - mkdir conda_build - pushd conda_build - conda update -n base --all -y - conda update --all -y - conda install conda-build anaconda-client -y - conda build -q --python ${{ matrix.python-version }} -c nion -c conda-forge --override-channels --skip-existing --user nion --token ${{ secrets.anaconda_token }} .. - popd + print-hash: true