diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml
index 7f06066c..b91aab83 100644
--- a/.github/workflows/coverage.yml
+++ b/.github/workflows/coverage.yml
@@ -3,8 +3,6 @@
name: pytest-coverage-comment
on:
pull_request:
- branches:
- - '*'
# https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs
# `contents` is for permission to the contents of the repository.
@@ -18,16 +16,15 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
- with:
- fetch-depth: 0
+ - uses: actions/checkout@v4
- name: Set up PDM
uses: pdm-project/setup-pdm@v4
+ with:
+ cache: true
- - name: Install dependencies
- run: |
- pdm install
+ - name: Install dependencies with multirepo
+ uses: chipflow/pdm-multirepo@v3
- name: Build coverage file
run: |
diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml
index c19b712f..66a0436f 100644
--- a/.github/workflows/deploy-docs.yml
+++ b/.github/workflows/deploy-docs.yml
@@ -13,7 +13,6 @@ jobs:
- name: Setup PDM
uses: pdm-project/setup-pdm@v4
with:
- python-version: 3.12
cache: true
- name: Install dependencies
diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml
index aab73bb8..0a75433c 100644
--- a/.github/workflows/main.yaml
+++ b/.github/workflows/main.yaml
@@ -19,9 +19,12 @@ jobs:
fetch-depth: 0
- name: Set up PDM
uses: pdm-project/setup-pdm@v4
- - name: Install dependencies
- run: |
- pdm install
+ with:
+ cache: true
+
+ - name: Install dependencies with multirepo
+ uses: chipflow/pdm-multirepo@v3
+
- name: Run tests
run: |
pdm run test
@@ -39,75 +42,9 @@ jobs:
with:
fetch-depth: 0
- name: Check source code licenses
- run: |
- docker run --platform=linux/amd64 -v ${PWD}:/src ghcr.io/google/addlicense -v -check -l BSD-2-Clause -c "ChipFlow" -s=only -ignore **/__init__.py **/*.py
+ run: ./tools/license_check.sh
test-submit:
- runs-on: ubuntu-latest
- steps:
- - name: Check out source code
- uses: actions/checkout@v4
- with:
- fetch-depth: 0
- path: chipflow-lib
- - name: Check out chipflow-examples
- uses: actions/checkout@v4
- with:
- repository: ChipFlow/chipflow-examples
- fetch-depth: 0
- path: chipflow-examples
-
- - name: Set up PDM
- uses: pdm-project/setup-pdm@v4
- with:
- python-version: "3.10"
- cache: true
- cache-dependency-path: "./**/pyproject.toml"
- - name: Install dependencies
- working-directory: ./chipflow-examples
- run: |
- pdm install
- pdm run python -m ensurepip
- pdm run python -m pip install -e ../chipflow-lib
- - name: Run tests
- working-directory: ./chipflow-examples/minimal
- run: |
- pdm test
- pdm run chipflow pin lock
- pdm run chipflow silicon submit --wait
- env:
- CHIPFLOW_API_KEY: ${{ secrets.CHIPFLOW_API_KEY}}
-
- test-submit-dry:
- runs-on: ubuntu-latest
- steps:
- - name: Check out source code
- uses: actions/checkout@v4
- with:
- fetch-depth: 0
- path: chipflow-lib
- - name: Check out chipflow-examples
- uses: actions/checkout@v4
- with:
- repository: ChipFlow/chipflow-examples
- fetch-depth: 0
- path: chipflow-examples
-
- - name: Set up PDM
- uses: pdm-project/setup-pdm@v4
- with:
- python-version: "3.10"
- cache: true
- cache-dependency-path: "./**/pyproject.toml"
- - name: Install dependencies
- working-directory: ./chipflow-examples
- run: |
- pdm install
- pdm run python -m ensurepip
- pdm run python -m pip install -e ../chipflow-lib
- - name: Run tests
- working-directory: ./chipflow-examples/minimal
- run: |
- pdm test
- pdm run chipflow pin lock
- pdm run chipflow silicon submit --dry-run
+ uses: ./.github/workflows/test-examples.yml
+ secrets:
+ CHIPFLOW_API_KEY: ${{ secrets.CHIPFLOW_API_KEY}}
diff --git a/.github/workflows/preview-docs.yml b/.github/workflows/preview-docs.yml
index 81dbb37f..13a643b7 100644
--- a/.github/workflows/preview-docs.yml
+++ b/.github/workflows/preview-docs.yml
@@ -17,11 +17,10 @@ jobs:
- name: Setup PDM
uses: pdm-project/setup-pdm@v4
with:
- python-version: 3.12
cache: true
- - name: Install dependencies
- run: pdm install
+ - name: Install dependencies with multirepo
+ uses: chipflow/pdm-multirepo@v3
- name: Build docs
run: pdm docs
diff --git a/.github/workflows/test-examples.yml b/.github/workflows/test-examples.yml
new file mode 100644
index 00000000..95308ad3
--- /dev/null
+++ b/.github/workflows/test-examples.yml
@@ -0,0 +1,76 @@
+name: Reusable workflow to test everything in chipflow-examples works
+
+on:
+ workflow_call:
+ secrets:
+ CHIPFLOW_API_KEY:
+ required: true
+
+jobs:
+ test-submit:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ dry: [true, false]
+ repo:
+ - name: "ChipFlow/chipflow-examples"
+ design: "minimal"
+ env:
+ DRY: ${{ matrix.dry && '--dry-run' || '' }}
+ is_dry: ${{ matrix.dry && '(dry run)' || '' }}
+ our_path: "${{ github.workspace}}/${{ github.repo }}"
+ test_repo_path: "${{ github.workspace }}/${{ matrix.repo.name }}"
+
+ name: ${{ matrix.dry && 'Test Submit - Dry run' || 'Test submit' }}
+
+ steps:
+ - name: Check out source code
+ uses: actions/checkout@v4
+ with:
+ path: ${{ env.our_path }}
+
+ - name: Check out ${{ matrix.repo.name }}
+ uses: actions/checkout@v4
+ with:
+ repository: ${{ matrix.repo.name }}
+ path: ${{ env.test_repo_path }}
+
+ - name: Check for branch ${{ github.head_ref }}
+ working-directory: ${{ env.test_repo_path }}
+ if: github.event_name == 'pull_request'
+ run: |
+ git remote update
+ git checkout ${{ github.head_ref }} || echo "${{github.head_ref}} not found, checking base ${{github.base_ref}}"
+
+ - name: Check for branch ${{ github.base_ref }}
+ working-directory: ${{ env.test_repo_path }}
+ if: github.event_name == 'pull_request'
+ run: |
+ git remote update
+ git checkout ${{ github.base_ref }} || echo "${{github.base_ref}} not found Falling back to main"
+
+
+ - name: Set up PDM
+ uses: pdm-project/setup-pdm@v4
+ with:
+ python-version: '3.10'
+ cache: true
+ cache-dependency-path: './**/pyproject.toml'
+
+ - name: Install dependencies with multirepo
+ uses: chipflow/pdm-multirepo@v3
+ with:
+ working-directory: ${{ env.test_repo_path }}
+
+ - name: Run tests
+ working-directory: ${{ env.test_repo_path }}
+ run: |
+ pdm test
+
+ - name: Submit build ${{ env.is_dry }}
+ working-directory: ${{ env.test_repo_path }}/${{ matrix.repo.design }}
+ run: |
+ pdm run chipflow pin lock
+ pdm run chipflow silicon submit --wait $DRY
+ env:
+ CHIPFLOW_API_KEY: ${{ secrets.CHIPFLOW_API_KEY}}
diff --git a/docs/getting-started.rst b/docs/getting-started.rst
index 331c0be0..6f0ca5d7 100644
--- a/docs/getting-started.rst
+++ b/docs/getting-started.rst
@@ -29,7 +29,8 @@ Clone chipflow-examples
.. note::
If you’re familiar with the `Git `__ command line
- then go clone [ChipFlow/chipflow-examples](https://github.com/ChipFlow/chipflow-examples)
+ then go clone `ChipFlow/chipflow-examples `,
+ switch to the `release branch `,
and jump ahead to `Install the Dependencies`_
@@ -39,7 +40,7 @@ it you will be asked to sign in or create an account - we recommend you
take this moment to create a GitHub account if you don’t already have
one!
-Navigate to `the chipflow-examples repository `__
+Navigate to `the chipflow-examples repository release branch `__
and click the green ‘Code’ button at the top. Select ‘Open with GitHub Desktop’ and
then follow the prompts (N.B. your web browser may have a pop-up to
authorise opening an external app)
@@ -165,19 +166,3 @@ you can instead call:
.. |Image showing the link to click| image:: _assets/open-github-desktop.png
.. |Image showing where to click in GitHub Desktop to open in VSCode| image:: _assets/github-desktop-open.png
-
-Installation
-------------
-
-1. Clone the ChipFlow repository:
-
- .. code-block:: bash
-
- git clone https://github.com/ChipFlow/chipflow-lib.git
- cd chipflow-lib
-
-2. Install dependencies using PDM:
-
- .. code-block:: bash
-
- pdm install
diff --git a/pdm.lock b/pdm.lock
index e1c46d03..ab660aef 100644
--- a/pdm.lock
+++ b/pdm.lock
@@ -2,28 +2,28 @@
# It is not intended for manual editing.
[metadata]
-groups = ["default", "doc", "lint", "test"]
+groups = ["default", "dev"]
strategy = ["inherit_metadata"]
lock_version = "4.5.0"
-content_hash = "sha256:16f1c148bb979fe3aa07e3f68f07889f19cb07c96aa62aa93a6770a66105e787"
+content_hash = "sha256:56747870bdc90d61b3998ef927a80f142c6d09300a91eefba510a8d99a5ce383"
[[metadata.targets]]
requires_python = ">=3.10"
[[package]]
name = "alabaster"
-version = "1.0.0"
-requires_python = ">=3.10"
+version = "0.7.16"
+requires_python = ">=3.9"
summary = "A light, configurable Sphinx theme"
-groups = ["doc"]
+groups = ["dev"]
files = [
- {file = "alabaster-1.0.0-py3-none-any.whl", hash = "sha256:fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b"},
- {file = "alabaster-1.0.0.tar.gz", hash = "sha256:c00dca57bca26fa62a6d7d0a9fcce65f3e026e9bfe33e9c538fd3fbb2144fd9e"},
+ {file = "alabaster-0.7.16-py3-none-any.whl", hash = "sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92"},
+ {file = "alabaster-0.7.16.tar.gz", hash = "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65"},
]
[[package]]
name = "amaranth"
-version = "0.5.4"
+version = "0.5.5"
requires_python = "~=3.8"
summary = "Amaranth hardware definition language"
groups = ["default"]
@@ -34,8 +34,8 @@ dependencies = [
"pyvcd<0.5,>=0.2.2",
]
files = [
- {file = "amaranth-0.5.4-py3-none-any.whl", hash = "sha256:ce7473b4220acc78474474fd132177ca545fb144d4e69e1c7dbfc2ed7d32bcf3"},
- {file = "amaranth-0.5.4.tar.gz", hash = "sha256:a0ea7ffe358ab00d5524b53c43277d279723437be146c8250e26f6b349b8a4fd"},
+ {file = "amaranth-0.5.5-py3-none-any.whl", hash = "sha256:b0dc1c75d0d7dcdf1df0c1f8e310ab87891d374ca6566ffa8aebde72a6fed77b"},
+ {file = "amaranth-0.5.5.tar.gz", hash = "sha256:5b32c03e889e4b84d0c5ef38fda9c9dabd5ffeba53297d8df26e334dcd3dff15"},
]
[[package]]
@@ -78,16 +78,16 @@ files = [
[[package]]
name = "astroid"
-version = "3.3.9"
+version = "3.3.10"
requires_python = ">=3.9.0"
summary = "An abstract syntax tree for Python with inference support."
-groups = ["doc"]
+groups = ["dev"]
dependencies = [
- "typing-extensions>=4.0.0; python_version < \"3.11\"",
+ "typing-extensions>=4; python_version < \"3.11\"",
]
files = [
- {file = "astroid-3.3.9-py3-none-any.whl", hash = "sha256:d05bfd0acba96a7bd43e222828b7d9bc1e138aaeb0649707908d3702a9831248"},
- {file = "astroid-3.3.9.tar.gz", hash = "sha256:622cc8e3048684aa42c820d9d218978021c3c3d174fb03a9f0d615921744f550"},
+ {file = "astroid-3.3.10-py3-none-any.whl", hash = "sha256:104fb9cb9b27ea95e847a94c003be03a9e039334a8ebca5ee27dafaf5c5711eb"},
+ {file = "astroid-3.3.10.tar.gz", hash = "sha256:c332157953060c6deb9caa57303ae0d20b0fbdb2e59b4a4f2a6ba49d0a7961ce"},
]
[[package]]
@@ -106,7 +106,7 @@ name = "babel"
version = "2.17.0"
requires_python = ">=3.8"
summary = "Internationalization utilities"
-groups = ["doc"]
+groups = ["dev"]
dependencies = [
"pytz>=2015.7; python_version < \"3.9\"",
]
@@ -120,7 +120,7 @@ name = "beautifulsoup4"
version = "4.13.4"
requires_python = ">=3.7.0"
summary = "Screen-scraping library"
-groups = ["doc"]
+groups = ["dev"]
dependencies = [
"soupsieve>1.2",
"typing-extensions>=4.0.0",
@@ -135,7 +135,7 @@ name = "certifi"
version = "2025.4.26"
requires_python = ">=3.6"
summary = "Python package for providing Mozilla's CA Bundle."
-groups = ["default", "doc"]
+groups = ["default", "dev"]
files = [
{file = "certifi-2025.4.26-py3-none-any.whl", hash = "sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3"},
{file = "certifi-2025.4.26.tar.gz", hash = "sha256:0a816057ea3cdefcef70270d2c515e4506bbc954f417fa5ade2021213bb8f0c6"},
@@ -146,7 +146,7 @@ name = "charset-normalizer"
version = "3.4.2"
requires_python = ">=3.7"
summary = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
-groups = ["default", "doc"]
+groups = ["default", "dev"]
files = [
{file = "charset_normalizer-3.4.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941"},
{file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd"},
@@ -206,17 +206,16 @@ files = [
[[package]]
name = "click"
-version = "8.1.8"
-requires_python = ">=3.7"
+version = "8.2.0"
+requires_python = ">=3.10"
summary = "Composable command line interface toolkit"
groups = ["default"]
dependencies = [
"colorama; platform_system == \"Windows\"",
- "importlib-metadata; python_version < \"3.8\"",
]
files = [
- {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"},
- {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"},
+ {file = "click-8.2.0-py3-none-any.whl", hash = "sha256:6b303f0b2aa85f1cb4e5303078fadcbcd4e476f114fab9b5007005711839325c"},
+ {file = "click-8.2.0.tar.gz", hash = "sha256:f5452aeddd9988eefa20f90f05ab66f17fce1ee2a36907fd30b05bbb5953814d"},
]
[[package]]
@@ -235,7 +234,7 @@ name = "colorama"
version = "0.4.6"
requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
summary = "Cross-platform colored terminal text."
-groups = ["default", "doc", "test"]
+groups = ["default", "dev"]
marker = "sys_platform == \"win32\" or platform_system == \"Windows\""
files = [
{file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
@@ -247,7 +246,7 @@ name = "coverage"
version = "7.8.0"
requires_python = ">=3.9"
summary = "Code coverage measurement for Python"
-groups = ["test"]
+groups = ["dev"]
files = [
{file = "coverage-7.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2931f66991175369859b5fd58529cd4b73582461877ecfd859b6549869287ffe"},
{file = "coverage-7.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:52a523153c568d2c0ef8826f6cc23031dc86cffb8c6aeab92c4ff776e7951b28"},
@@ -310,7 +309,7 @@ version = "7.8.0"
extras = ["toml"]
requires_python = ">=3.9"
summary = "Code coverage measurement for Python"
-groups = ["test"]
+groups = ["dev"]
dependencies = [
"coverage==7.8.0",
"tomli; python_full_version <= \"3.11.0a6\"",
@@ -376,7 +375,7 @@ name = "docutils"
version = "0.21.2"
requires_python = ">=3.9"
summary = "Docutils -- Python Documentation Utilities"
-groups = ["doc"]
+groups = ["dev"]
files = [
{file = "docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2"},
{file = "docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f"},
@@ -399,14 +398,17 @@ files = [
[[package]]
name = "exceptiongroup"
-version = "1.2.2"
+version = "1.3.0"
requires_python = ">=3.7"
summary = "Backport of PEP 654 (exception groups)"
-groups = ["test"]
+groups = ["dev"]
marker = "python_version < \"3.11\""
+dependencies = [
+ "typing-extensions>=4.6.0; python_version < \"3.13\"",
+]
files = [
- {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"},
- {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"},
+ {file = "exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10"},
+ {file = "exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88"},
]
[[package]]
@@ -414,7 +416,7 @@ name = "furo"
version = "2024.8.6"
requires_python = ">=3.8"
summary = "A clean customisable Sphinx documentation theme."
-groups = ["doc"]
+groups = ["dev"]
dependencies = [
"beautifulsoup4",
"pygments>=2.7",
@@ -431,7 +433,7 @@ name = "idna"
version = "3.10"
requires_python = ">=3.6"
summary = "Internationalized Domain Names in Applications (IDNA)"
-groups = ["default", "doc"]
+groups = ["default", "dev"]
files = [
{file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"},
{file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"},
@@ -442,7 +444,7 @@ name = "imagesize"
version = "1.4.1"
requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
summary = "Getting image size from png/jpeg/jpeg2000/gif file"
-groups = ["doc"]
+groups = ["dev"]
files = [
{file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"},
{file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"},
@@ -482,7 +484,7 @@ name = "iniconfig"
version = "2.1.0"
requires_python = ">=3.8"
summary = "brain-dead simple config-ini parsing"
-groups = ["test"]
+groups = ["dev"]
files = [
{file = "iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760"},
{file = "iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"},
@@ -493,7 +495,7 @@ name = "jinja2"
version = "3.1.6"
requires_python = ">=3.7"
summary = "A very fast and expressive template engine."
-groups = ["default", "doc"]
+groups = ["default", "dev"]
dependencies = [
"MarkupSafe>=2.0",
]
@@ -554,7 +556,7 @@ name = "markupsafe"
version = "3.0.2"
requires_python = ">=3.9"
summary = "Safely add untrusted strings to HTML/XML markup."
-groups = ["default", "doc"]
+groups = ["default", "dev"]
files = [
{file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"},
{file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"},
@@ -614,7 +616,7 @@ name = "packaging"
version = "25.0"
requires_python = ">=3.8"
summary = "Core utilities for Python packages"
-groups = ["doc", "test"]
+groups = ["dev"]
files = [
{file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"},
{file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"},
@@ -636,7 +638,7 @@ name = "pluggy"
version = "1.5.0"
requires_python = ">=3.8"
summary = "plugin and hook calling mechanisms for python"
-groups = ["test"]
+groups = ["dev"]
files = [
{file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"},
{file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"},
@@ -753,7 +755,7 @@ name = "pygments"
version = "2.19.1"
requires_python = ">=3.8"
summary = "Pygments is a syntax highlighting package written in Python."
-groups = ["doc"]
+groups = ["dev"]
files = [
{file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"},
{file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"},
@@ -764,7 +766,7 @@ name = "pytest"
version = "8.3.5"
requires_python = ">=3.8"
summary = "pytest: simple powerful testing with Python"
-groups = ["test"]
+groups = ["dev"]
dependencies = [
"colorama; sys_platform == \"win32\"",
"exceptiongroup>=1.0.0rc8; python_version < \"3.11\"",
@@ -783,7 +785,7 @@ name = "pytest-cov"
version = "6.1.1"
requires_python = ">=3.9"
summary = "Pytest plugin for measuring coverage."
-groups = ["test"]
+groups = ["dev"]
dependencies = [
"coverage[toml]>=7.5",
"pytest>=4.6",
@@ -820,7 +822,7 @@ name = "pyyaml"
version = "6.0.2"
requires_python = ">=3.8"
summary = "YAML parser and emitter for Python"
-groups = ["doc"]
+groups = ["dev"]
files = [
{file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"},
{file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"},
@@ -882,7 +884,7 @@ name = "requests"
version = "2.32.3"
requires_python = ">=3.8"
summary = "Python HTTP for Humans."
-groups = ["default", "doc"]
+groups = ["default", "dev"]
dependencies = [
"certifi>=2017.4.17",
"charset-normalizer<4,>=2",
@@ -1005,40 +1007,40 @@ files = [
[[package]]
name = "ruff"
-version = "0.11.8"
+version = "0.11.9"
requires_python = ">=3.7"
summary = "An extremely fast Python linter and code formatter, written in Rust."
-groups = ["lint"]
-files = [
- {file = "ruff-0.11.8-py3-none-linux_armv6l.whl", hash = "sha256:896a37516c594805e34020c4a7546c8f8a234b679a7716a3f08197f38913e1a3"},
- {file = "ruff-0.11.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ab86d22d3d721a40dd3ecbb5e86ab03b2e053bc93c700dc68d1c3346b36ce835"},
- {file = "ruff-0.11.8-py3-none-macosx_11_0_arm64.whl", hash = "sha256:258f3585057508d317610e8a412788cf726efeefa2fec4dba4001d9e6f90d46c"},
- {file = "ruff-0.11.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:727d01702f7c30baed3fc3a34901a640001a2828c793525043c29f7614994a8c"},
- {file = "ruff-0.11.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3dca977cc4fc8f66e89900fa415ffe4dbc2e969da9d7a54bfca81a128c5ac219"},
- {file = "ruff-0.11.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c657fa987d60b104d2be8b052d66da0a2a88f9bd1d66b2254333e84ea2720c7f"},
- {file = "ruff-0.11.8-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:f2e74b021d0de5eceb8bd32919f6ff8a9b40ee62ed97becd44993ae5b9949474"},
- {file = "ruff-0.11.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f9b5ef39820abc0f2c62111f7045009e46b275f5b99d5e59dda113c39b7f4f38"},
- {file = "ruff-0.11.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c1dba3135ca503727aa4648152c0fa67c3b1385d3dc81c75cd8a229c4b2a1458"},
- {file = "ruff-0.11.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f024d32e62faad0f76b2d6afd141b8c171515e4fb91ce9fd6464335c81244e5"},
- {file = "ruff-0.11.8-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:d365618d3ad747432e1ae50d61775b78c055fee5936d77fb4d92c6f559741948"},
- {file = "ruff-0.11.8-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:4d9aaa91035bdf612c8ee7266153bcf16005c7c7e2f5878406911c92a31633cb"},
- {file = "ruff-0.11.8-py3-none-musllinux_1_2_i686.whl", hash = "sha256:0eba551324733efc76116d9f3a0d52946bc2751f0cd30661564117d6fd60897c"},
- {file = "ruff-0.11.8-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:161eb4cff5cfefdb6c9b8b3671d09f7def2f960cee33481dd898caf2bcd02304"},
- {file = "ruff-0.11.8-py3-none-win32.whl", hash = "sha256:5b18caa297a786465cc511d7f8be19226acf9c0a1127e06e736cd4e1878c3ea2"},
- {file = "ruff-0.11.8-py3-none-win_amd64.whl", hash = "sha256:6e70d11043bef637c5617297bdedec9632af15d53ac1e1ba29c448da9341b0c4"},
- {file = "ruff-0.11.8-py3-none-win_arm64.whl", hash = "sha256:304432e4c4a792e3da85b7699feb3426a0908ab98bf29df22a31b0cdd098fac2"},
- {file = "ruff-0.11.8.tar.gz", hash = "sha256:6d742d10626f9004b781f4558154bb226620a7242080e11caeffab1a40e99df8"},
+groups = ["dev"]
+files = [
+ {file = "ruff-0.11.9-py3-none-linux_armv6l.whl", hash = "sha256:a31a1d143a5e6f499d1fb480f8e1e780b4dfdd580f86e05e87b835d22c5c6f8c"},
+ {file = "ruff-0.11.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:66bc18ca783b97186a1f3100e91e492615767ae0a3be584e1266aa9051990722"},
+ {file = "ruff-0.11.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:bd576cd06962825de8aece49f28707662ada6a1ff2db848d1348e12c580acbf1"},
+ {file = "ruff-0.11.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b1d18b4be8182cc6fddf859ce432cc9631556e9f371ada52f3eaefc10d878de"},
+ {file = "ruff-0.11.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0f3f46f759ac623e94824b1e5a687a0df5cd7f5b00718ff9c24f0a894a683be7"},
+ {file = "ruff-0.11.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f34847eea11932d97b521450cf3e1d17863cfa5a94f21a056b93fb86f3f3dba2"},
+ {file = "ruff-0.11.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:f33b15e00435773df97cddcd263578aa83af996b913721d86f47f4e0ee0ff271"},
+ {file = "ruff-0.11.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7b27613a683b086f2aca8996f63cb3dd7bc49e6eccf590563221f7b43ded3f65"},
+ {file = "ruff-0.11.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e0d88756e63e8302e630cee3ce2ffb77859797cc84a830a24473939e6da3ca6"},
+ {file = "ruff-0.11.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:537c82c9829d7811e3aa680205f94c81a2958a122ac391c0eb60336ace741a70"},
+ {file = "ruff-0.11.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:440ac6a7029f3dee7d46ab7de6f54b19e34c2b090bb4f2480d0a2d635228f381"},
+ {file = "ruff-0.11.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:71c539bac63d0788a30227ed4d43b81353c89437d355fdc52e0cda4ce5651787"},
+ {file = "ruff-0.11.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:c67117bc82457e4501473c5f5217d49d9222a360794bfb63968e09e70f340abd"},
+ {file = "ruff-0.11.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e4b78454f97aa454586e8a5557facb40d683e74246c97372af3c2d76901d697b"},
+ {file = "ruff-0.11.9-py3-none-win32.whl", hash = "sha256:7fe1bc950e7d7b42caaee2a8a3bc27410547cc032c9558ee2e0f6d3b209e845a"},
+ {file = "ruff-0.11.9-py3-none-win_amd64.whl", hash = "sha256:52edaa4a6d70f8180343a5b7f030c7edd36ad180c9f4d224959c2d689962d964"},
+ {file = "ruff-0.11.9-py3-none-win_arm64.whl", hash = "sha256:bcf42689c22f2e240f496d0c183ef2c6f7b35e809f12c1db58f75d9aa8d630ca"},
+ {file = "ruff-0.11.9.tar.gz", hash = "sha256:ebd58d4f67a00afb3a30bf7d383e52d0e036e6195143c6db7019604a05335517"},
]
[[package]]
name = "snowballstemmer"
-version = "3.0.0.1"
+version = "3.0.1"
requires_python = "!=3.0.*,!=3.1.*,!=3.2.*"
summary = "This package provides 32 stemmers for 30 languages generated from Snowball algorithms."
-groups = ["doc"]
+groups = ["dev"]
files = [
- {file = "snowballstemmer-3.0.0.1-py3-none-any.whl", hash = "sha256:d1cdabc06fb492e80620d9e2c44d39e67cfda290b2aaef8718b0691079443b10"},
- {file = "snowballstemmer-3.0.0.1.tar.gz", hash = "sha256:1d09493a5ecc85fb5b433674e9c83fcd41c6739b6979ce4b54e81a40ec078342"},
+ {file = "snowballstemmer-3.0.1-py3-none-any.whl", hash = "sha256:6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064"},
+ {file = "snowballstemmer-3.0.1.tar.gz", hash = "sha256:6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895"},
]
[[package]]
@@ -1046,7 +1048,7 @@ name = "soupsieve"
version = "2.7"
requires_python = ">=3.8"
summary = "A modern CSS selector implementation for Beautiful Soup."
-groups = ["doc"]
+groups = ["dev"]
files = [
{file = "soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4"},
{file = "soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a"},
@@ -1054,32 +1056,33 @@ files = [
[[package]]
name = "sphinx"
-version = "8.1.3"
-requires_python = ">=3.10"
+version = "7.4.7"
+requires_python = ">=3.9"
summary = "Python documentation generator"
-groups = ["doc"]
+groups = ["dev"]
dependencies = [
"Jinja2>=3.1",
"Pygments>=2.17",
- "alabaster>=0.7.14",
+ "alabaster~=0.7.14",
"babel>=2.13",
"colorama>=0.4.6; sys_platform == \"win32\"",
"docutils<0.22,>=0.20",
"imagesize>=1.3",
+ "importlib-metadata>=6.0; python_version < \"3.10\"",
"packaging>=23.0",
"requests>=2.30.0",
"snowballstemmer>=2.2",
- "sphinxcontrib-applehelp>=1.0.7",
- "sphinxcontrib-devhelp>=1.0.6",
- "sphinxcontrib-htmlhelp>=2.0.6",
- "sphinxcontrib-jsmath>=1.0.1",
- "sphinxcontrib-qthelp>=1.0.6",
+ "sphinxcontrib-applehelp",
+ "sphinxcontrib-devhelp",
+ "sphinxcontrib-htmlhelp>=2.0.0",
+ "sphinxcontrib-jsmath",
+ "sphinxcontrib-qthelp",
"sphinxcontrib-serializinghtml>=1.1.9",
"tomli>=2; python_version < \"3.11\"",
]
files = [
- {file = "sphinx-8.1.3-py3-none-any.whl", hash = "sha256:09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2"},
- {file = "sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927"},
+ {file = "sphinx-7.4.7-py3-none-any.whl", hash = "sha256:c2419e2135d11f1951cd994d6eb18a1835bd8fdd8429f9ca375dc1f3281bd239"},
+ {file = "sphinx-7.4.7.tar.gz", hash = "sha256:242f92a7ea7e6c5b406fdc2615413890ba9f699114a9c09192d7dfead2ee9cfe"},
]
[[package]]
@@ -1087,7 +1090,7 @@ name = "sphinx-autoapi"
version = "3.6.0"
requires_python = ">=3.9"
summary = "Sphinx API documentation generator"
-groups = ["doc"]
+groups = ["dev"]
dependencies = [
"Jinja2",
"PyYAML",
@@ -1106,7 +1109,7 @@ name = "sphinx-basic-ng"
version = "1.0.0b2"
requires_python = ">=3.7"
summary = "A modern skeleton for Sphinx themes."
-groups = ["doc"]
+groups = ["dev"]
dependencies = [
"sphinx>=4.0",
]
@@ -1120,7 +1123,7 @@ name = "sphinxcontrib-applehelp"
version = "2.0.0"
requires_python = ">=3.9"
summary = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books"
-groups = ["doc"]
+groups = ["dev"]
files = [
{file = "sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5"},
{file = "sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1"},
@@ -1131,7 +1134,7 @@ name = "sphinxcontrib-devhelp"
version = "2.0.0"
requires_python = ">=3.9"
summary = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents"
-groups = ["doc"]
+groups = ["dev"]
files = [
{file = "sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2"},
{file = "sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad"},
@@ -1142,7 +1145,7 @@ name = "sphinxcontrib-htmlhelp"
version = "2.1.0"
requires_python = ">=3.9"
summary = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files"
-groups = ["doc"]
+groups = ["dev"]
files = [
{file = "sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8"},
{file = "sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9"},
@@ -1153,7 +1156,7 @@ name = "sphinxcontrib-jsmath"
version = "1.0.1"
requires_python = ">=3.5"
summary = "A sphinx extension which renders display math in HTML via JavaScript"
-groups = ["doc"]
+groups = ["dev"]
files = [
{file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"},
{file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"},
@@ -1164,7 +1167,7 @@ name = "sphinxcontrib-qthelp"
version = "2.0.0"
requires_python = ">=3.9"
summary = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents"
-groups = ["doc"]
+groups = ["dev"]
files = [
{file = "sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb"},
{file = "sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab"},
@@ -1175,7 +1178,7 @@ name = "sphinxcontrib-serializinghtml"
version = "2.0.0"
requires_python = ">=3.9"
summary = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)"
-groups = ["doc"]
+groups = ["dev"]
files = [
{file = "sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331"},
{file = "sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d"},
@@ -1186,7 +1189,7 @@ name = "tomli"
version = "2.2.1"
requires_python = ">=3.8"
summary = "A lil' TOML parser"
-groups = ["default", "doc", "test"]
+groups = ["default", "dev"]
files = [
{file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"},
{file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"},
@@ -1227,7 +1230,7 @@ name = "typing-extensions"
version = "4.13.2"
requires_python = ">=3.8"
summary = "Backported and Experimental Type Hints for Python 3.8+"
-groups = ["default", "doc"]
+groups = ["default", "dev"]
files = [
{file = "typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c"},
{file = "typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef"},
@@ -1252,7 +1255,7 @@ name = "urllib3"
version = "2.4.0"
requires_python = ">=3.9"
summary = "HTTP library with thread-safe connection pooling, file post, and more."
-groups = ["default", "doc"]
+groups = ["default", "dev"]
files = [
{file = "urllib3-2.4.0-py3-none-any.whl", hash = "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813"},
{file = "urllib3-2.4.0.tar.gz", hash = "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466"},
diff --git a/pyproject.toml b/pyproject.toml
index 233b1f39..02485d8b 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -75,16 +75,12 @@ test-silicon.cmd = "pytest tests/test_silicon_platform.py tests/test_silicon_pla
chipflow.cmd = "chipflow"
[dependency-groups]
-lint = [
+dev = [
"ruff>=0.9.2",
-]
-test = [
"pytest>=7.2.0",
"pytest-cov>=6.0.0",
-]
-doc = [
"sphinx-autoapi>=3.5.0",
- "sphinx>=7.4.7",
+ "sphinx~=7.4.7",
"furo>=2024.04.27",
]
diff --git a/tools/license_check.sh b/tools/license_check.sh
new file mode 100755
index 00000000..4e700344
--- /dev/null
+++ b/tools/license_check.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+docker run --platform=linux/amd64 -v ${PWD}:/src ghcr.io/google/addlicense -v -check -l BSD-2-Clause -c "ChipFlow" -s=only -ignore **/__init__.py **/*.py
+
+