diff --git a/.github/workflows/cron.yml b/.github/workflows/cron.yml new file mode 100644 index 000000000..64f9669d2 --- /dev/null +++ b/.github/workflows/cron.yml @@ -0,0 +1,11 @@ +name: Cron Test + +on: + schedule: + # Run every Tuesday at 10:30. + - cron: '30 10 * * 2' + +jobs: + prerequisites: + uses: ./.github/workflows/test.yml + diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml deleted file mode 100644 index f24b68d7a..000000000 --- a/.github/workflows/lint.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: Lint - -on: - push: - branches: - - stable - - devel - tags: - - "[0-9]+.[0-9]+.[0-9]+" - - "[0-9]+.[0-9]+.[0-9]+a[0-9]+" - pull_request: - branches: - - stable - - devel - -jobs: - lint: - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest] - python-version: ["3.11"] - timeout-minutes: 60 - - steps: - - uses: actions/checkout@v4 - - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python-version }} - - - name: Install dependencies - run: | - python -m pip install --upgrade pip setuptools wheel - python -m pip install tox tox-gh-actions - - - name: isort - run: tox -e isort - - - name: black - run: tox -e black - - - name: flake8 - run: tox -e flake8 diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b43a978e7..fbf6fa930 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,89 +1,15 @@ -name: CI-CD +name: CI on: push: branches: - stable - devel - tags: - - "[0-9]+.[0-9]+.[0-9]+" - - "[0-9]+.[0-9]+.[0-9]+a[0-9]+" pull_request: branches: - stable - devel jobs: - test: - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest, macos-latest, windows-latest] - python-version: ["3.8", "3.11"] - timeout-minutes: 360 - - steps: - - uses: actions/checkout@v4 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python-version }} - - name: Install dependencies - run: | - python -m pip install --upgrade pip setuptools wheel - python -m pip install tox tox-gh-actions - - name: Test with tox - run: tox -- --benchmark-skip - timeout-minutes: 60 - - name: Report coverage - shell: bash - run: bash <(curl -s https://codecov.io/bash) - - release: - needs: test - if: github.ref_type == 'tag' - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-latest] - python-version: ["3.11"] - permissions: - contents: write - - steps: - - uses: actions/checkout@v4 - - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python-version }} - - - name: Install dependencies - run: | - python -m pip install --upgrade pip setuptools wheel - python -m pip install build twine - - - name: Build package - run: python -m build - - - name: Publish to PyPI - env: - TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }} - TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} - run: twine upload --skip-existing --non-interactive dist/* - - - name: GH release - uses: softprops/action-gh-release@v1 - with: - body_path: "release-notes/${{ github.ref_name }}.md" - draft: false - prerelease: false - - - name: Publish to website - run: ./scripts/deploy_website.sh - shell: bash - env: - TAG: ${{ github.ref_name }} - WORKSPACE: ${{ github.workspace }} - WEBSITE_DEPLOY_TOKEN: ${{ secrets.WEBSITE_DEPLOY_TOKEN }} + prerequisites: + uses: ./.github/workflows/test.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..fe7a5b2fe --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,60 @@ +name: CD + +on: + push: + tags: + - "[0-9]+.[0-9]+.[0-9]+" + - "[0-9]+.[0-9]+.[0-9]+(a|b|rc|post|dev)[0-9]+" + +jobs: + prerequisites: + uses: ./.github/workflows/test.yml + + release: + needs: [prerequisites] + strategy: + matrix: + os: [ubuntu-latest] + python-version: ["3.11"] + runs-on: ${{ matrix.os }} + permissions: + # Write permissions are needed to create OIDC tokens. + id-token: write + # Write permissions are needed to make GitHub releases. + contents: write + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dependencies + run: | + python -m pip install --upgrade pip setuptools wheel + python -m pip install build + + - name: Build package + run: python -m build + + # We rely on a trusted publisher configuration being present on PyPI, + # see https://docs.pypi.org/trusted-publishers/. + - name: Publish to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + + - name: GH release + uses: softprops/action-gh-release@v2 + with: + body_path: "release-notes/${{ github.ref_name }}.md" + draft: false + prerelease: false + + - name: Publish to website + run: ./scripts/deploy_website.sh + shell: bash + env: + TAG: ${{ github.ref_name }} + WORKSPACE: ${{ github.workspace }} + WEBSITE_DEPLOY_TOKEN: ${{ secrets.WEBSITE_DEPLOY_TOKEN }} diff --git a/.github/workflows/safety.yml b/.github/workflows/safety.yml deleted file mode 100644 index 2ee91668e..000000000 --- a/.github/workflows/safety.yml +++ /dev/null @@ -1,36 +0,0 @@ -name: Safety - -on: - push: - branches: - - stable - - devel - tags: - - "[0-9]+.[0-9]+.[0-9]+" - - "[0-9]+.[0-9]+.[0-9]+a[0-9]+" - -jobs: - safety: - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest, macos-latest, windows-latest] - python-version: ["3.8", "3.9", "3.10", "3.11"] - timeout-minutes: 120 - - steps: - - uses: actions/checkout@v4 - - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python-version }} - - - name: Install dependencies - run: | - python -m pip install --upgrade pip setuptools wheel - python -m pip install tox tox-gh-actions - - - name: safety - run: tox -e safety diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 000000000..f931cfb06 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,71 @@ +name: Test Suite + +on: + workflow_dispatch: {} + workflow_call: {} + +jobs: + lint: + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest] + python-version: ["3.11"] + runs-on: ${{ matrix.os }} + timeout-minutes: 60 + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dependencies + run: | + python -m pip install --upgrade pip setuptools wheel + python -m pip install tox tox-gh-actions + + - name: isort + run: tox -e isort + + - name: black + run: tox -e black + + - name: flake8 + run: tox -e flake8 + + test: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + python-version: ["3.8", "3.11"] + timeout-minutes: 360 + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dependencies + run: | + python -m pip install --upgrade pip setuptools wheel + python -m pip install tox tox-gh-actions + + - name: safety + run: tox -e safety + + - name: Test with tox + run: tox -- --benchmark-skip + timeout-minutes: 60 + + - name: Report coverage + shell: bash + run: bash <(curl -s https://codecov.io/bash) + diff --git a/README.rst b/README.rst index a7259981b..d6fe233d7 100644 --- a/README.rst +++ b/README.rst @@ -18,8 +18,8 @@ COBRApy - Constraint-Based Reconstruction and Analysis in Python :target: https://github.com/opencobra/cobrapy/blob/devel/.github/CODE_OF_CONDUCT.md :alt: Code of Conduct -.. image:: https://github.com/opencobra/cobrapy/workflows/CI-CD/badge.svg - :target: https://github.com/opencobra/cobrapy/workflows/CI-CD +.. image:: https://github.com/opencobra/cobrapy/actions/workflows/main.yml/badge.svg + :target: https://github.com/opencobra/cobrapy/actions/workflows/main.yml :alt: GitHub Actions CI/CD Status .. image:: https://codecov.io/gh/opencobra/cobrapy/branch/master/graph/badge.svg diff --git a/src/cobra/io/mat.py b/src/cobra/io/mat.py index c3a7be0bd..2a67d5ec8 100644 --- a/src/cobra/io/mat.py +++ b/src/cobra/io/mat.py @@ -875,7 +875,7 @@ def from_mat_struct( # RECON3.0 mat has an array within an array for subsystems. # If we find a model that has multiple subsytems per reaction, this should be # modified - if np.sctype2char(m["subSystems"][0, 0][0][0]) == "O" and isinstance( + if m["subSystems"][0, 0][0][0].dtype.char == "O" and isinstance( m["subSystems"][0, 0][0][0][0], np.ndarray ): rxn_subsystems = [ diff --git a/tox.ini b/tox.ini index a10197e30..d409fdfdd 100644 --- a/tox.ini +++ b/tox.ini @@ -63,7 +63,7 @@ commands= deps= safety commands= - safety check --full-report + safety check --full-report -i 70612 [testenv:install] skip_install = True