From 8d41234ef7b3e2ea59c23deb9d962d0b3e164dea Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Tue, 9 Apr 2024 01:33:27 +0100 Subject: [PATCH 01/12] Use xml for coverage info (#6947) * append more apps * set source * use labels to force full CI suit * always check for label * use newer syntax * remove unneeded carryforward flag * improve action names * remove unused upload steps * enable discovery of locate test * remove wrong module * delete all ( :-) )lines for upload * remove init for now * add carryfoward back in again * disable flaky test * always run finsh step * deactivate machine test for now * specify refs explicitly * add docker exception * use xml for coverage info * dummy fix * remove dummy fix * dummy change * always export * change path to ensure basepath is submitted * add more paths * reverst isort change * remove unused html export * remove paralell * add plain InvenTree too * Update pyproject.toml * reset paths * Update qc_checks.yaml * Update qc_checks.yaml * fix coverage runner setting * fix coverage tool path * use move, not copy * ignore tmp * reset isort settings * use relative files for reporting * Revert "use relative files for reporting" This reverts commit 1f662bfb975fb30e1de8668463d145a50bc3deb0. * only run after at least 1 succeeds * add TODO * remove coverage subdir run * also force migrations * add coverage to migrations * fix conditional for migration force check * always upload coverage * disable flaky test * fix tests * wait for migrations * re-add function arg? * adjust coverage targets * add no-cov for fixes of flaky tests * remove dummy * revert to "old" upload method" --- .github/workflows/qc_checks.yaml | 1 + tasks.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/qc_checks.yaml b/.github/workflows/qc_checks.yaml index ca8ef33b49..580eed7341 100644 --- a/.github/workflows/qc_checks.yaml +++ b/.github/workflows/qc_checks.yaml @@ -292,6 +292,7 @@ jobs: with: github-token: ${{ secrets.GITHUB_TOKEN }} flag-name: backend + file: coverage.xml git-commit: ${{ github.sha }} git-branch: ${{ github.ref }} parallel: true diff --git a/tasks.py b/tasks.py index 4113511ea9..37052e2014 100644 --- a/tasks.py +++ b/tasks.py @@ -870,7 +870,7 @@ def test( if coverage: # Run tests within coverage environment, and generate report c.run(f'coverage run {managePyPath()} {cmd}') - c.run('coverage html -i') + c.run('coverage xml -i') else: # Run simple test runner, without coverage manage(c, cmd, pty=pty) From 0778a77a417721456e72ab7819717de3c6456055 Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 9 Apr 2024 22:50:06 +1000 Subject: [PATCH 02/12] Revert "Bump sqren/backport-github-action from 8.9.3 to 9.3.1 (#6802)" (#6984) This reverts commit 34d8f5d65d0bb80b3da23439f2a4208076ee7835. --- .github/workflows/backport.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/backport.yml b/.github/workflows/backport.yml index 9afc5b840f..67ed6f6da8 100644 --- a/.github/workflows/backport.yml +++ b/.github/workflows/backport.yml @@ -27,7 +27,7 @@ jobs: ) steps: - name: Backport Action - uses: sqren/backport-github-action@f7073a2287aefc1fa12685eb25a712ab5620445c # pin@v9.2.2 + uses: sqren/backport-github-action@f54e19901f2a57f8b82360f2490d47ee82ec82c6 # pin@v9.2.2 with: github_token: ${{ secrets.GITHUB_TOKEN }} auto_backport_label_prefix: backport-to- From 77c8a9d255b78ab14bce439946a64cc9efa2f594 Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Tue, 9 Apr 2024 23:56:19 +0100 Subject: [PATCH 03/12] [PUI] Move buttons form components (#6988) * move buttons * fix import --- src/frontend/src/components/{items => buttons}/CopyButton.tsx | 0 src/frontend/src/components/{items => buttons}/EditButton.tsx | 0 src/frontend/src/components/{items => buttons}/ScanButton.tsx | 0 src/frontend/src/components/{items => buttons}/YesNoButton.tsx | 0 src/frontend/src/components/details/Details.tsx | 2 +- src/frontend/src/components/forms/InstanceOptions.tsx | 2 +- src/frontend/src/components/items/InfoItem.tsx | 2 +- src/frontend/src/components/modals/AboutInvenTreeModal.tsx | 2 +- src/frontend/src/components/nav/Header.tsx | 2 +- .../pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx | 2 +- src/frontend/src/tables/ColumnRenderers.tsx | 2 +- src/frontend/src/tables/bom/BomTable.tsx | 2 +- src/frontend/src/tables/company/AddressTable.tsx | 2 +- src/frontend/src/tables/machine/MachineListTable.tsx | 2 +- src/frontend/src/tables/part/ParametricPartTable.tsx | 2 +- src/frontend/src/tables/part/PartCategoryTable.tsx | 2 +- src/frontend/src/tables/part/PartParameterTable.tsx | 2 +- src/frontend/src/tables/stock/StockItemTestResultTable.tsx | 2 +- 18 files changed, 14 insertions(+), 14 deletions(-) rename src/frontend/src/components/{items => buttons}/CopyButton.tsx (100%) rename src/frontend/src/components/{items => buttons}/EditButton.tsx (100%) rename src/frontend/src/components/{items => buttons}/ScanButton.tsx (100%) rename src/frontend/src/components/{items => buttons}/YesNoButton.tsx (100%) diff --git a/src/frontend/src/components/items/CopyButton.tsx b/src/frontend/src/components/buttons/CopyButton.tsx similarity index 100% rename from src/frontend/src/components/items/CopyButton.tsx rename to src/frontend/src/components/buttons/CopyButton.tsx diff --git a/src/frontend/src/components/items/EditButton.tsx b/src/frontend/src/components/buttons/EditButton.tsx similarity index 100% rename from src/frontend/src/components/items/EditButton.tsx rename to src/frontend/src/components/buttons/EditButton.tsx diff --git a/src/frontend/src/components/items/ScanButton.tsx b/src/frontend/src/components/buttons/ScanButton.tsx similarity index 100% rename from src/frontend/src/components/items/ScanButton.tsx rename to src/frontend/src/components/buttons/ScanButton.tsx diff --git a/src/frontend/src/components/items/YesNoButton.tsx b/src/frontend/src/components/buttons/YesNoButton.tsx similarity index 100% rename from src/frontend/src/components/items/YesNoButton.tsx rename to src/frontend/src/components/buttons/YesNoButton.tsx diff --git a/src/frontend/src/components/details/Details.tsx b/src/frontend/src/components/details/Details.tsx index d82615212d..e0c8a6cc44 100644 --- a/src/frontend/src/components/details/Details.tsx +++ b/src/frontend/src/components/details/Details.tsx @@ -23,9 +23,9 @@ import { getDetailUrl } from '../../functions/urls'; import { base_url } from '../../main'; import { apiUrl } from '../../states/ApiState'; import { useGlobalSettingsState } from '../../states/SettingsState'; +import { YesNoButton } from '../buttons/YesNoButton'; import { ProgressBar } from '../items/ProgressBar'; import { StylishText } from '../items/StylishText'; -import { YesNoButton } from '../items/YesNoButton'; import { getModelInfo } from '../render/ModelType'; import { StatusRenderer } from '../render/StatusRenderer'; diff --git a/src/frontend/src/components/forms/InstanceOptions.tsx b/src/frontend/src/components/forms/InstanceOptions.tsx index 9dc1c1115f..4074cee3cf 100644 --- a/src/frontend/src/components/forms/InstanceOptions.tsx +++ b/src/frontend/src/components/forms/InstanceOptions.tsx @@ -6,7 +6,7 @@ import { IconCheck } from '@tabler/icons-react'; import { useServerApiState } from '../../states/ApiState'; import { useLocalState } from '../../states/LocalState'; import { HostList } from '../../states/states'; -import { EditButton } from '../items/EditButton'; +import { EditButton } from '../buttons/EditButton'; import { HostOptionsForm } from './HostOptionsForm'; export function InstanceOptions({ diff --git a/src/frontend/src/components/items/InfoItem.tsx b/src/frontend/src/components/items/InfoItem.tsx index dbfdae25ec..ad12e5d855 100644 --- a/src/frontend/src/components/items/InfoItem.tsx +++ b/src/frontend/src/components/items/InfoItem.tsx @@ -2,8 +2,8 @@ import { Trans } from '@lingui/macro'; import { Code, Flex, Group, Text } from '@mantine/core'; import { Link, To } from 'react-router-dom'; +import { YesNoButton } from '../buttons/YesNoButton'; import { DetailDrawerLink } from '../nav/DetailDrawer'; -import { YesNoButton } from './YesNoButton'; export function InfoItem({ name, diff --git a/src/frontend/src/components/modals/AboutInvenTreeModal.tsx b/src/frontend/src/components/modals/AboutInvenTreeModal.tsx index 19e7d5011c..4c4bd53c14 100644 --- a/src/frontend/src/components/modals/AboutInvenTreeModal.tsx +++ b/src/frontend/src/components/modals/AboutInvenTreeModal.tsx @@ -19,7 +19,7 @@ import { ApiEndpoints } from '../../enums/ApiEndpoints'; import { apiUrl, useServerApiState } from '../../states/ApiState'; import { useLocalState } from '../../states/LocalState'; import { useUserState } from '../../states/UserState'; -import { CopyButton } from '../items/CopyButton'; +import { CopyButton } from '../buttons/CopyButton'; type AboutLookupRef = { ref: string; diff --git a/src/frontend/src/components/nav/Header.tsx b/src/frontend/src/components/nav/Header.tsx index b4f139cfb8..755db08a8d 100644 --- a/src/frontend/src/components/nav/Header.tsx +++ b/src/frontend/src/components/nav/Header.tsx @@ -10,7 +10,7 @@ import { navTabs as mainNavTabs } from '../../defaults/links'; import { ApiEndpoints } from '../../enums/ApiEndpoints'; import { InvenTreeStyle } from '../../globalStyle'; import { apiUrl } from '../../states/ApiState'; -import { ScanButton } from '../items/ScanButton'; +import { ScanButton } from '../buttons/ScanButton'; import { MainMenu } from './MainMenu'; import { NavHoverMenu } from './NavHoverMenu'; import { NavigationDrawer } from './NavigationDrawer'; diff --git a/src/frontend/src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx b/src/frontend/src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx index 576e34a75d..f5b89678b9 100644 --- a/src/frontend/src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx +++ b/src/frontend/src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx @@ -4,7 +4,7 @@ import { useForm } from '@mantine/form'; import { useToggle } from '@mantine/hooks'; import { api } from '../../../../App'; -import { EditButton } from '../../../../components/items/EditButton'; +import { EditButton } from '../../../../components/buttons/EditButton'; import { ApiEndpoints } from '../../../../enums/ApiEndpoints'; import { apiUrl } from '../../../../states/ApiState'; import { useUserState } from '../../../../states/UserState'; diff --git a/src/frontend/src/tables/ColumnRenderers.tsx b/src/frontend/src/tables/ColumnRenderers.tsx index acd89d48c4..a7f266e8da 100644 --- a/src/frontend/src/tables/ColumnRenderers.tsx +++ b/src/frontend/src/tables/ColumnRenderers.tsx @@ -4,9 +4,9 @@ import { t } from '@lingui/macro'; import { Anchor } from '@mantine/core'; +import { YesNoButton } from '../components/buttons/YesNoButton'; import { Thumbnail } from '../components/images/Thumbnail'; import { ProgressBar } from '../components/items/ProgressBar'; -import { YesNoButton } from '../components/items/YesNoButton'; import { TableStatusRenderer } from '../components/render/StatusRenderer'; import { RenderOwner } from '../components/render/User'; import { formatCurrency, renderDate } from '../defaults/formatters'; diff --git a/src/frontend/src/tables/bom/BomTable.tsx b/src/frontend/src/tables/bom/BomTable.tsx index 5c4e602526..b2101897dc 100644 --- a/src/frontend/src/tables/bom/BomTable.tsx +++ b/src/frontend/src/tables/bom/BomTable.tsx @@ -8,8 +8,8 @@ import { import { ReactNode, useCallback, useMemo } from 'react'; import { useNavigate } from 'react-router-dom'; +import { YesNoButton } from '../../components/buttons/YesNoButton'; import { Thumbnail } from '../../components/images/Thumbnail'; -import { YesNoButton } from '../../components/items/YesNoButton'; import { formatPriceRange } from '../../defaults/formatters'; import { ApiEndpoints } from '../../enums/ApiEndpoints'; import { ModelType } from '../../enums/ModelType'; diff --git a/src/frontend/src/tables/company/AddressTable.tsx b/src/frontend/src/tables/company/AddressTable.tsx index 96af3c7d9f..bef8d0cef9 100644 --- a/src/frontend/src/tables/company/AddressTable.tsx +++ b/src/frontend/src/tables/company/AddressTable.tsx @@ -2,8 +2,8 @@ import { t } from '@lingui/macro'; import { useCallback, useMemo, useState } from 'react'; import { AddItemButton } from '../../components/buttons/AddItemButton'; +import { YesNoButton } from '../../components/buttons/YesNoButton'; import { ApiFormFieldSet } from '../../components/forms/fields/ApiFormField'; -import { YesNoButton } from '../../components/items/YesNoButton'; import { ApiEndpoints } from '../../enums/ApiEndpoints'; import { UserRoles } from '../../enums/Roles'; import { diff --git a/src/frontend/src/tables/machine/MachineListTable.tsx b/src/frontend/src/tables/machine/MachineListTable.tsx index 28c703f304..d46772f4b2 100644 --- a/src/frontend/src/tables/machine/MachineListTable.tsx +++ b/src/frontend/src/tables/machine/MachineListTable.tsx @@ -23,6 +23,7 @@ import { useNavigate } from 'react-router-dom'; import { api } from '../../App'; import { AddItemButton } from '../../components/buttons/AddItemButton'; +import { YesNoButton } from '../../components/buttons/YesNoButton'; import { ActionDropdown, DeleteItemAction, @@ -30,7 +31,6 @@ import { } from '../../components/items/ActionDropdown'; import { InfoItem } from '../../components/items/InfoItem'; import { UnavailableIndicator } from '../../components/items/UnavailableIndicator'; -import { YesNoButton } from '../../components/items/YesNoButton'; import { DetailDrawer, DetailDrawerLink diff --git a/src/frontend/src/tables/part/ParametricPartTable.tsx b/src/frontend/src/tables/part/ParametricPartTable.tsx index c842efde04..ee2baa620f 100644 --- a/src/frontend/src/tables/part/ParametricPartTable.tsx +++ b/src/frontend/src/tables/part/ParametricPartTable.tsx @@ -6,8 +6,8 @@ import { useQuery } from '@tanstack/react-query'; import { useCallback, useMemo, useState } from 'react'; import { api } from '../../App'; +import { YesNoButton } from '../../components/buttons/YesNoButton'; import { ApiFormFieldSet } from '../../components/forms/fields/ApiFormField'; -import { YesNoButton } from '../../components/items/YesNoButton'; import { ApiEndpoints } from '../../enums/ApiEndpoints'; import { ModelType } from '../../enums/ModelType'; import { UserRoles } from '../../enums/Roles'; diff --git a/src/frontend/src/tables/part/PartCategoryTable.tsx b/src/frontend/src/tables/part/PartCategoryTable.tsx index 46cbe72b2f..8f78438b18 100644 --- a/src/frontend/src/tables/part/PartCategoryTable.tsx +++ b/src/frontend/src/tables/part/PartCategoryTable.tsx @@ -3,7 +3,7 @@ import { useCallback, useMemo, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { AddItemButton } from '../../components/buttons/AddItemButton'; -import { YesNoButton } from '../../components/items/YesNoButton'; +import { YesNoButton } from '../../components/buttons/YesNoButton'; import { ApiEndpoints } from '../../enums/ApiEndpoints'; import { ModelType } from '../../enums/ModelType'; import { UserRoles } from '../../enums/Roles'; diff --git a/src/frontend/src/tables/part/PartParameterTable.tsx b/src/frontend/src/tables/part/PartParameterTable.tsx index a598cf885a..80e37fbb20 100644 --- a/src/frontend/src/tables/part/PartParameterTable.tsx +++ b/src/frontend/src/tables/part/PartParameterTable.tsx @@ -3,8 +3,8 @@ import { Text } from '@mantine/core'; import { useCallback, useMemo, useState } from 'react'; import { AddItemButton } from '../../components/buttons/AddItemButton'; +import { YesNoButton } from '../../components/buttons/YesNoButton'; import { ApiFormFieldSet } from '../../components/forms/fields/ApiFormField'; -import { YesNoButton } from '../../components/items/YesNoButton'; import { ApiEndpoints } from '../../enums/ApiEndpoints'; import { UserRoles } from '../../enums/Roles'; import { diff --git a/src/frontend/src/tables/stock/StockItemTestResultTable.tsx b/src/frontend/src/tables/stock/StockItemTestResultTable.tsx index dba02931cf..8014e1a33b 100644 --- a/src/frontend/src/tables/stock/StockItemTestResultTable.tsx +++ b/src/frontend/src/tables/stock/StockItemTestResultTable.tsx @@ -12,9 +12,9 @@ import { useCallback, useEffect, useMemo, useState } from 'react'; import { api } from '../../App'; import { AddItemButton } from '../../components/buttons/AddItemButton'; +import { PassFailButton } from '../../components/buttons/YesNoButton'; import { ApiFormFieldSet } from '../../components/forms/fields/ApiFormField'; import { AttachmentLink } from '../../components/items/AttachmentLink'; -import { PassFailButton } from '../../components/items/YesNoButton'; import { RenderUser } from '../../components/render/User'; import { renderDate } from '../../defaults/formatters'; import { ApiEndpoints } from '../../enums/ApiEndpoints'; From 80475c57b212869c5cbe794b9b6ea9da8fafb601 Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Wed, 10 Apr 2024 09:45:57 +0100 Subject: [PATCH 04/12] [CI] Optimize runs (#6991) * only run backend if required * alwass upload coverage --- .github/workflows/qc_checks.yaml | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/.github/workflows/qc_checks.yaml b/.github/workflows/qc_checks.yaml index 580eed7341..936dec2586 100644 --- a/.github/workflows/qc_checks.yaml +++ b/.github/workflows/qc_checks.yaml @@ -220,7 +220,8 @@ jobs: name: Tests - inventree-python runs-on: ubuntu-20.04 - needs: pre-commit + needs: [ 'pre-commit', 'paths-filter' ] + if: needs.paths-filter.outputs.server == 'true' || needs.paths-filter.outputs.force == 'true' env: wrapper_name: inventree-python @@ -261,7 +262,8 @@ jobs: name: Tests - DB [SQLite] + Coverage runs-on: ubuntu-20.04 - needs: [ 'pre-commit' ] + needs: [ 'pre-commit', 'paths-filter' ] + if: needs.paths-filter.outputs.server == 'true' || needs.paths-filter.outputs.force == 'true' continue-on-error: true # continue if a step fails so that coverage gets pushed env: @@ -298,6 +300,7 @@ jobs: parallel: true - name: Upload coverage reports to Codecov uses: codecov/codecov-action@v4.0.1 + if: always() with: token: ${{ secrets.CODECOV_TOKEN }} slug: inventree/InvenTree @@ -306,7 +309,8 @@ jobs: postgres: name: Tests - DB [PostgreSQL] runs-on: ubuntu-20.04 - needs: [ 'pre-commit' ] + needs: [ 'pre-commit', 'paths-filter' ] + if: needs.paths-filter.outputs.server == 'true' || needs.paths-filter.outputs.force == 'true' env: INVENTREE_DB_ENGINE: django.db.backends.postgresql @@ -350,7 +354,8 @@ jobs: name: Tests - DB [MySQL] runs-on: ubuntu-20.04 - needs: [ 'pre-commit' ] + needs: [ 'pre-commit', 'paths-filter' ] + if: needs.paths-filter.outputs.server == 'true' || needs.paths-filter.outputs.force == 'true' env: # Database backend configuration @@ -435,6 +440,7 @@ jobs: git-branch: ${{ github.ref }} - name: Upload coverage reports to Codecov uses: codecov/codecov-action@v4.0.1 + if: always() with: token: ${{ secrets.CODECOV_TOKEN }} slug: inventree/InvenTree @@ -539,6 +545,7 @@ jobs: parallel: true - name: Upload coverage reports to Codecov uses: codecov/codecov-action@v4.0.1 + if: always() with: token: ${{ secrets.CODECOV_TOKEN }} slug: inventree/InvenTree From 0d59f6e8a9bde30edeac029ee59f1b2565d4fcf0 Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Wed, 10 Apr 2024 16:00:30 +0100 Subject: [PATCH 05/12] [CI] Re-add playwright reporting (#6992) * re-add playwright reporting now a bit more ressource optimised * only upload if the tests faild --- .github/workflows/qc_checks.yaml | 7 +++++++ src/frontend/playwright.config.ts | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/qc_checks.yaml b/.github/workflows/qc_checks.yaml index 936dec2586..b703f77990 100644 --- a/.github/workflows/qc_checks.yaml +++ b/.github/workflows/qc_checks.yaml @@ -530,7 +530,14 @@ jobs: - name: Install Playwright Browsers run: cd src/frontend && npx playwright install --with-deps - name: Run Playwright tests + id: tests run: cd src/frontend && npx nyc playwright test + - uses: actions/upload-artifact@v4 + if: ${{ !cancelled() && steps.tests.outcome == 'failure' }} + with: + name: playwright-report + path: src/frontend/playwright-report/ + retention-days: 14 - name: Report coverage if: always() run: cd src/frontend && npx nyc report --report-dir ./coverage --temp-dir .nyc_output --reporter=lcov --exclude-after-remap false diff --git a/src/frontend/playwright.config.ts b/src/frontend/playwright.config.ts index ded3e1028b..d40ec5cf42 100644 --- a/src/frontend/playwright.config.ts +++ b/src/frontend/playwright.config.ts @@ -6,7 +6,7 @@ export default defineConfig({ forbidOnly: !!process.env.CI, retries: process.env.CI ? 1 : 0, workers: process.env.CI ? 2 : undefined, - reporter: process.env.CI ? 'github' : 'list', + reporter: process.env.CI ? [['html', { open: 'never' }], ['github']] : 'list', /* Configure projects for major browsers */ projects: [ From 1e0382c719f9bc9736b189d1f32f630de4ffc8b3 Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Wed, 10 Apr 2024 16:00:48 +0100 Subject: [PATCH 06/12] [PUI] Fix licensing dialog (#6993) * make licensing dialog more failure tolerant * add error text if no info can be parsed * Update LicenseModal.tsx fix copy co-author: @SchrodingersGat --- .../src/components/modals/LicenseModal.tsx | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/frontend/src/components/modals/LicenseModal.tsx b/src/frontend/src/components/modals/LicenseModal.tsx index 05c8d4a79c..a790e765b5 100644 --- a/src/frontend/src/components/modals/LicenseModal.tsx +++ b/src/frontend/src/components/modals/LicenseModal.tsx @@ -20,7 +20,7 @@ export function LicenceView(entries: Readonly) { return ( - {entries?.length > 0 && ( + {entries?.length > 0 ? ( {entries?.map((entry: any, index: number) => ( @@ -38,6 +38,10 @@ export function LicenceView(entries: Readonly) { ))} + ) : ( + + No Information provided - this is likely a server issue + )} ); @@ -53,6 +57,8 @@ export function LicenseModal() { .catch(() => {}) }); + const rspdata = !data ? [] : Object.keys(data ?? {}); + return ( @@ -69,16 +75,16 @@ export function LicenseModal() { ) : ( - + - {Object.keys(data ?? {}).map((key) => ( + {rspdata.map((key) => ( {key} Packages ))} - {Object.keys(data ?? {}).map((key) => ( + {rspdata.map((key) => ( {LicenceView(data[key] ?? [])} From f61259e0d24e74a4bdf8dfae2fb037e03db3e3bf Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 11 Apr 2024 10:05:20 +1000 Subject: [PATCH 07/12] Improve DB efficiency for user settings (#6996) - Prefetch related user - Prevents 1+N issue --- src/backend/InvenTree/common/api.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/backend/InvenTree/common/api.py b/src/backend/InvenTree/common/api.py index f3e5066bde..50f6361e0b 100644 --- a/src/backend/InvenTree/common/api.py +++ b/src/backend/InvenTree/common/api.py @@ -258,6 +258,13 @@ class UserSettingsList(SettingsList): common.models.InvenTreeUserSetting.build_default_values(user=request.user) return super().list(request, *args, **kwargs) + def get_queryset(self): + """Return prefetched queryset.""" + queryset = super().get_queryset() + queryset = queryset.prefetch_related('user') + + return queryset + def filter_queryset(self, queryset): """Only list settings which apply to the current user.""" try: From 6b858f777bebf510cc9a3648ff41384abb2612d3 Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Thu, 11 Apr 2024 01:11:12 +0100 Subject: [PATCH 08/12] [CI] Increase migration test coverage (#6995) * also trigger CI on changes to test files * dummy change to test file * fix match pattern --- .github/workflows/qc_checks.yaml | 1 + src/backend/InvenTree/stock/test_migrations.py | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/qc_checks.yaml b/.github/workflows/qc_checks.yaml index b703f77990..d3f99e13bd 100644 --- a/.github/workflows/qc_checks.yaml +++ b/.github/workflows/qc_checks.yaml @@ -48,6 +48,7 @@ jobs: - 'src/backend/requirements.txt' - 'src/backend/requirements-dev.txt' migrations: + - '**/test_migrations.py' - '**/migrations/**' - '.github/workflows**' - 'src/backend/requirements.txt' diff --git a/src/backend/InvenTree/stock/test_migrations.py b/src/backend/InvenTree/stock/test_migrations.py index 1d2eb0f0b2..c052325f17 100644 --- a/src/backend/InvenTree/stock/test_migrations.py +++ b/src/backend/InvenTree/stock/test_migrations.py @@ -64,6 +64,7 @@ class TestSerialNumberMigration(MigratorTestCase): big_ref_item.serial, '9999999999999999999999999999999999999999999999999999999999999', ) + self.assertEqual(big_ref_item.serial_int, 0x7FFFFFFF) From 6fe0f746b6762bb50e36b949ba805cadc0821a5b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Apr 2024 20:00:03 +1000 Subject: [PATCH 09/12] Bump codecov/codecov-action from 4.0.1 to 4.3.0 (#6994) Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 4.0.1 to 4.3.0. - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/v4.0.1...v4.3.0) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/qc_checks.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/qc_checks.yaml b/.github/workflows/qc_checks.yaml index d3f99e13bd..c55f1dde86 100644 --- a/.github/workflows/qc_checks.yaml +++ b/.github/workflows/qc_checks.yaml @@ -300,7 +300,7 @@ jobs: git-branch: ${{ github.ref }} parallel: true - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@v4.0.1 + uses: codecov/codecov-action@v4.3.0 if: always() with: token: ${{ secrets.CODECOV_TOKEN }} @@ -440,7 +440,7 @@ jobs: git-commit: ${{ github.sha }} git-branch: ${{ github.ref }} - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@v4.0.1 + uses: codecov/codecov-action@v4.3.0 if: always() with: token: ${{ secrets.CODECOV_TOKEN }} @@ -552,7 +552,7 @@ jobs: git-branch: ${{ github.ref }} parallel: true - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@v4.0.1 + uses: codecov/codecov-action@v4.3.0 if: always() with: token: ${{ secrets.CODECOV_TOKEN }} From 485045e9c0134e67b4847fc88100dc8fe6bdac96 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 11 Apr 2024 21:12:41 +1000 Subject: [PATCH 10/12] Admin shell (#6998) * Add django-admin-shell package * Optionally enable debug shell - Requires debug mode - Requires admin integration * Add message if admin shell package not installed * Ignore qa for these lines --- requirements.txt | 2 +- src/backend/InvenTree/InvenTree/settings.py | 23 +++++++++++++++++++++ src/backend/InvenTree/InvenTree/urls.py | 6 +++++- src/backend/requirements-dev.in | 1 + src/backend/requirements-dev.txt | 5 ++++- 5 files changed, 34 insertions(+), 3 deletions(-) diff --git a/requirements.txt b/requirements.txt index 63e33d7163..3e374ea6fa 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ # Dummy requirements file to trigger the package pipeline -# The new requirements file is located in src/backend/requirements.txt +# The backend requirements file is located in src/backend/requirements.txt # diff --git a/src/backend/InvenTree/InvenTree/settings.py b/src/backend/InvenTree/InvenTree/settings.py index 516096a6b4..bd60fdf598 100644 --- a/src/backend/InvenTree/InvenTree/settings.py +++ b/src/backend/InvenTree/InvenTree/settings.py @@ -288,6 +288,29 @@ QUERYCOUNT = { 'RESPONSE_HEADER': 'X-Django-Query-Count', } +ADMIN_SHELL_ENABLE = False +ADMIN_SHELL_IMPORT_DJANGO = False +ADMIN_SHELL_IMPORT_MODELS = False + +# In DEBUG mode, add support for django-admin-shell +# Ref: https://github.com/djk2/django-admin-shell +if ( + DEBUG + and INVENTREE_ADMIN_ENABLED + and get_boolean_setting('INVENTREE_DEBUG_SHELL', 'debug_shell', False) +): # noqa + try: + import django_admin_shell + + INSTALLED_APPS.append('django_admin_shell') + ADMIN_SHELL_ENABLE = True + + logger.warning('Admin shell is enabled') + except ModuleNotFoundError: + logger.warning( + 'django-admin-shell is not installed - Admin shell is not enabled' + ) + AUTHENTICATION_BACKENDS = CONFIG.get( 'authentication_backends', [ diff --git a/src/backend/InvenTree/InvenTree/urls.py b/src/backend/InvenTree/InvenTree/urls.py index 85aa1f0954..c71f567206 100644 --- a/src/backend/InvenTree/InvenTree/urls.py +++ b/src/backend/InvenTree/InvenTree/urls.py @@ -435,7 +435,11 @@ classic_frontendpatterns = [ urlpatterns = [] if settings.INVENTREE_ADMIN_ENABLED: - admin_url = (settings.INVENTREE_ADMIN_URL,) + admin_url = settings.INVENTREE_ADMIN_URL + + if settings.ADMIN_SHELL_ENABLE: # noqa + urlpatterns += [path(f'{admin_url}/shell/', include('django_admin_shell.urls'))] + urlpatterns += [ path(f'{admin_url}/error_log/', include('error_report.urls')), path(f'{admin_url}/', admin.site.urls, name='inventree-admin'), diff --git a/src/backend/requirements-dev.in b/src/backend/requirements-dev.in index ab3c583153..b345e119ba 100644 --- a/src/backend/requirements-dev.in +++ b/src/backend/requirements-dev.in @@ -2,6 +2,7 @@ -c requirements.txt coverage[toml] # Unit test coverage coveralls==2.1.2 # Coveralls linking (for tracking coverage) # PINNED 2022-06-28 - Old version needed for correct upload +django-admin-shell # Remote shell access django-querycount # Display number of URL queries for requests django-slowtests # Show which unit tests are running slowly django-test-migrations # Unit testing for database migrations diff --git a/src/backend/requirements-dev.txt b/src/backend/requirements-dev.txt index 770b65b283..693c8bc1d4 100644 --- a/src/backend/requirements-dev.txt +++ b/src/backend/requirements-dev.txt @@ -24,7 +24,10 @@ cryptography==42.0.5 distlib==0.3.8 # via virtualenv django==4.2.11 - # via django-slowtests + # via + # django-admin-shell + # django-slowtests +django-admin-shell==2.0.1 django-querycount==0.8.3 django-slowtests==1.1.1 django-test-migrations==1.3.0 From 252cc7975ad6f6c7985515993059d24e5b628e21 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 12 Apr 2024 07:05:07 +1000 Subject: [PATCH 11/12] Bump github/codeql-action from 3.24.9 to 3.24.10 (#6976) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.24.9 to 3.24.10. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/1b1aada464948af03b950897e5eb522f92603cc2...4355270be187e1b672a7a1c7c7bae5afdc1ab94a) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 8d69fcf44a..e3633a6f27 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -67,6 +67,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@1b1aada464948af03b950897e5eb522f92603cc2 # v3.24.9 + uses: github/codeql-action/upload-sarif@4355270be187e1b672a7a1c7c7bae5afdc1ab94a # v3.24.10 with: sarif_file: results.sarif From ff8eeca8c06cb12401749667dd56789a37f8b5ea Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 12 Apr 2024 07:29:38 +1000 Subject: [PATCH 12/12] Bump rapidfuzz from 3.8.0 to 3.8.1 in /src/backend (#6980) * Bump rapidfuzz from 3.8.0 to 3.8.1 in /src/backend Bumps [rapidfuzz](https://github.com/rapidfuzz/RapidFuzz) from 3.8.0 to 3.8.1. - [Release notes](https://github.com/rapidfuzz/RapidFuzz/releases) - [Changelog](https://github.com/rapidfuzz/RapidFuzz/blob/main/CHANGELOG.rst) - [Commits](https://github.com/rapidfuzz/RapidFuzz/compare/v3.8.0...v3.8.1) --- updated-dependencies: - dependency-name: rapidfuzz dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * fix req --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Matthias Mair --- src/backend/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/requirements.txt b/src/backend/requirements.txt index f3f7558c5a..4586243a19 100644 --- a/src/backend/requirements.txt +++ b/src/backend/requirements.txt @@ -272,7 +272,7 @@ pyyaml==6.0.1 # tablib qrcode[pil]==7.4.2 # via django-allauth-2fa -rapidfuzz==3.8.0 +rapidfuzz==3.8.1 redis==5.0.3 # via django-redis referencing==0.34.0