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 + +