diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index a3896db38..97c829cdd 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -47,10 +47,66 @@ jobs: - name: Git run: npm run test:git - unit: - needs: repo + build-pack: runs-on: ubuntu-latest - timeout-minutes: 30 + timeout-minutes: 10 + strategy: + fail-fast: false + matrix: + package: + [ + core, + core-util, + dashboard, + doc-site, + helpers, + react-components, + scene-composer, + source-iotsitewise, + source-iottwinmaker, + tools-iottwinmaker, + ] + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup node + uses: actions/setup-node@v4 + with: + node-version: 18 + cache: 'npm' + cache-dependency-path: '**/package-lock.json' + + - name: node_modules cache + id: npm-cache + uses: actions/cache@v4 + with: + path: '**/node_modules' + key: ${{ runner.os }}-node_modules-${{hashFiles('**/package-lock.json')}} + restore-keys: | + ${{ runner.os }}-node_modules- + + - name: Install + if: steps.npm-cache.outputs.cache-hit != 'true' + shell: bash + env: + NODE_OPTIONS: '--max_old_space_size=8192' + run: npm ci --prefer-offline --no-audit --progress=false --workspaces --include-workspace-root + + - name: Turbo cache + uses: actions/cache@v4 + with: + path: '.turbo' + key: ${{ runner.os }}-turbo-build-pack-${{ matrix.package}}-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-turbo-build-pack-${{ matrix.package}}- + + - name: Validate + run: npx turbo build pack -F @iot-app-kit/${{ matrix.package }} + + lint: + runs-on: ubuntu-latest + timeout-minutes: 10 strategy: fail-fast: false matrix: @@ -67,6 +123,7 @@ jobs: scene-composer, source-iotsitewise, source-iottwinmaker, + testing-util, tools-iottwinmaker, vite-config, ] @@ -101,25 +158,79 @@ jobs: uses: actions/cache@v4 with: path: '.turbo' - key: ${{ runner.os }}-turbo-unit-${{ matrix.package}}-${{ github.sha }} + key: ${{ runner.os }}-turbo-lint-${{ matrix.package}}-${{ github.sha }} restore-keys: | - ${{ runner.os }}-turbo-unit-${{ matrix.package}}- + ${{ runner.os }}-turbo-lint-${{ matrix.package}}- - - name: Test and lint cache + - name: Lint cache uses: actions/cache@v4 with: path: '**/.cache' - key: ${{ runner.os }}-test-lint-${{ matrix.package}}-${{ github.sha }} + key: ${{ runner.os }}-lint-${{ matrix.package}}-${{ github.sha }} restore-keys: | - ${{ runner.os }}-test-lint-${{ matrix.package}}- + ${{ runner.os }}-lint-${{ matrix.package}}- - name: Validate - run: npx turbo build lint test pack --filter=@iot-app-kit/${{ matrix.package }} + run: npx turbo lint -F @iot-app-kit/${{ matrix.package }} + + unit: + runs-on: ubuntu-latest + timeout-minutes: 10 + strategy: + fail-fast: false + matrix: + package: + [ + core, + core-util, + dashboard, + react-components, + scene-composer, + source-iotsitewise, + source-iottwinmaker, + tools-iottwinmaker, + ] + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup node + uses: actions/setup-node@v4 + with: + node-version: 18 + cache: 'npm' + cache-dependency-path: '**/package-lock.json' + + - name: node_modules cache + id: npm-cache + uses: actions/cache@v4 + with: + path: '**/node_modules' + key: ${{ runner.os }}-node_modules-${{hashFiles('**/package-lock.json')}} + restore-keys: | + ${{ runner.os }}-node_modules- + + - name: Install + if: steps.npm-cache.outputs.cache-hit != 'true' + shell: bash + env: + NODE_OPTIONS: '--max_old_space_size=8192' + run: npm ci --prefer-offline --no-audit --progress=false --workspaces --include-workspace-root + + - name: Turbo cache + uses: actions/cache@v4 + with: + path: '.turbo' + key: ${{ runner.os }}-turbo-unit-${{ matrix.package}}-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-turbo-unit-${{ matrix.package}}- + + - name: Validate + run: npx turbo test -F @iot-app-kit/${{ matrix.package }} playwright: - needs: repo runs-on: ubuntu-latest - timeout-minutes: 30 + timeout-minutes: 10 strategy: fail-fast: false matrix: @@ -190,7 +301,7 @@ jobs: - name: Playwright run: | - npx turbo test:ui:ci --filter=@iot-app-kit/${{ matrix.package.name }} -- --shard=${{ matrix.package.shardIndex }}/${{ matrix.package.totalShards }} + npx turbo test:ui:ci -F @iot-app-kit/${{ matrix.package.name }} -- --shard=${{ matrix.package.shardIndex }}/${{ matrix.package.totalShards }} - name: Test report id: upload-test-report diff --git a/package.json b/package.json index a1c3cceaf..b68781ec3 100644 --- a/package.json +++ b/package.json @@ -26,8 +26,12 @@ "start": "npm run dev", "dev": "turbo dev -F @iot-app-kit/dev-env", "build": "turbo build", - "clean": "npx rimraf .turbo .vscode", - "clean:nuke": "npx rimraf .turbo node_modules", + "clean": "turbo clean", + "clean:root": "npx rimraf .vscode", + "clean:turbo": "turbo clean:turbo", + "clean:turbo:root": "npx rimraf .turbo", + "clean:nuke": "turbo clean:nuke", + "clean:nuke:root": "npm run clean:root && npm run clean:turbo:root && npx rimraf node_modules", "fix": "turbo fix && npm run fix:stylelint", "fix:stylelint": "stylelint '**/*.css' --fix --ignore-path .gitignore", "test": "turbo test", diff --git a/packages/react-components/src/components/resource-explorers/testing/drop-down-variant/asset-drop-down.spec.tsx b/packages/react-components/src/components/resource-explorers/testing/drop-down-variant/asset-drop-down.spec.tsx index 4b1cef57a..7e64281eb 100644 --- a/packages/react-components/src/components/resource-explorers/testing/drop-down-variant/asset-drop-down.spec.tsx +++ b/packages/react-components/src/components/resource-explorers/testing/drop-down-variant/asset-drop-down.spec.tsx @@ -42,7 +42,7 @@ describe('asset drop-down', () => { await dropDown.open(); - expect(screen.getByText('No assets.')).toBeVisible(); + expect(screen.getAllByText('No assets.')[0]).toBeVisible(); }); it('renders a multi-select drop-down without configuration', async () => { @@ -52,7 +52,7 @@ describe('asset drop-down', () => { await dropDown.open(); - expect(screen.getByText('No assets.')).toBeVisible(); + expect(screen.getAllByText('No assets.')[0]).toBeVisible(); }); it('renders drop-down options', async () => { @@ -340,7 +340,7 @@ describe('asset drop-down', () => { expect(dropDown.getOption(asset1)).toBeVisible(); expect(dropDown.getOption(asset2)).toBeVisible(); expect(dropDown.queryOption(asset3)).not.toBeInTheDocument(); - expect(screen.getByText('(2/3) assets matched')).toBeVisible(); + expect(screen.getAllByText('(2/3) assets matched')[0]).toBeVisible(); await dropDown.clearFilter(); @@ -353,7 +353,7 @@ describe('asset drop-down', () => { expect(dropDown.queryOption(asset1)).not.toBeInTheDocument(); expect(dropDown.queryOption(asset2)).not.toBeInTheDocument(); expect(dropDown.getOption(asset3)).toBeVisible(); - expect(screen.getByText('(1/3) assets matched')).toBeVisible(); + expect(screen.getAllByText('(1/3) assets matched')[0]).toBeVisible(); await dropDown.clearFilter(); await user.keyboard('Similar Description'); @@ -361,7 +361,7 @@ describe('asset drop-down', () => { expect(dropDown.queryOption(asset1)).not.toBeInTheDocument(); expect(dropDown.getOption(asset2)).toBeVisible(); expect(dropDown.getOption(asset3)).toBeVisible(); - expect(screen.getByText('(2/3) assets matched')).toBeVisible(); + expect(screen.getAllByText('(2/3) assets matched')[0]).toBeVisible(); }); }); }); diff --git a/packages/react-components/src/components/resource-explorers/testing/drop-down-variant/asset-model-drop-down.spec.tsx b/packages/react-components/src/components/resource-explorers/testing/drop-down-variant/asset-model-drop-down.spec.tsx index 6a935e428..49bb6a980 100644 --- a/packages/react-components/src/components/resource-explorers/testing/drop-down-variant/asset-model-drop-down.spec.tsx +++ b/packages/react-components/src/components/resource-explorers/testing/drop-down-variant/asset-model-drop-down.spec.tsx @@ -44,7 +44,7 @@ describe('asset model drop-down', () => { await dropDown.open(); - expect(screen.getByText('No asset models.')).toBeVisible(); + expect(screen.getAllByText('No asset models.')[0]).toBeVisible(); }); it('renders a multi-select drop-down without configuration', async () => { @@ -54,7 +54,7 @@ describe('asset model drop-down', () => { await dropDown.open(); - expect(screen.getByText('No asset models.')).toBeVisible(); + expect(screen.getAllByText('No asset models.')[0]).toBeVisible(); }); it('renders drop-down options', async () => { @@ -326,7 +326,6 @@ describe('asset model drop-down', () => { }); }); - // TODO: fix this flaky test ASAP describe('filtering', () => { it('filters asset models', async () => { const assetModel1 = { @@ -369,7 +368,9 @@ describe('asset model drop-down', () => { expect(dropDown.getOption(assetModel1)).toBeVisible(); expect(dropDown.getOption(assetModel2)).toBeVisible(); expect(dropDown.queryOption(assetModel3)).not.toBeInTheDocument(); - expect(screen.getByText('(2/3) asset models matched')).toBeVisible(); + expect( + screen.getAllByText('(2/3) asset models matched')[0] + ).toBeVisible(); await dropDown.clearFilter(); @@ -382,7 +383,9 @@ describe('asset model drop-down', () => { expect(dropDown.queryOption(assetModel1)).not.toBeInTheDocument(); expect(dropDown.queryOption(assetModel2)).not.toBeInTheDocument(); expect(dropDown.getOption(assetModel3)).toBeVisible(); - expect(screen.getByText('(1/3) asset models matched')).toBeVisible(); + expect( + screen.getAllByText('(1/3) asset models matched')[0] + ).toBeVisible(); await dropDown.clearFilter(); await user.keyboard('Similar Description'); @@ -390,7 +393,9 @@ describe('asset model drop-down', () => { expect(dropDown.queryOption(assetModel1)).not.toBeInTheDocument(); expect(dropDown.getOption(assetModel2)).toBeVisible(); expect(dropDown.getOption(assetModel3)).toBeVisible(); - expect(screen.getByText('(2/3) asset models matched')).toBeVisible(); - }, 40000); + expect( + screen.getAllByText('(2/3) asset models matched')[0] + ).toBeVisible(); + }, 10000); }); }); diff --git a/packages/react-components/src/components/resource-explorers/testing/drop-down-variant/asset-property-drop-down.spec.tsx b/packages/react-components/src/components/resource-explorers/testing/drop-down-variant/asset-property-drop-down.spec.tsx index cf752dc81..84fbdf8b5 100644 --- a/packages/react-components/src/components/resource-explorers/testing/drop-down-variant/asset-property-drop-down.spec.tsx +++ b/packages/react-components/src/components/resource-explorers/testing/drop-down-variant/asset-property-drop-down.spec.tsx @@ -53,7 +53,7 @@ describe('asset property drop-down', () => { await dropDown.open(); - expect(screen.getByText('No asset properties.')).toBeVisible(); + expect(screen.getAllByText('No asset properties.')[0]).toBeVisible(); }); it('renders a multi-select drop-down without configuration', async () => { @@ -65,7 +65,7 @@ describe('asset property drop-down', () => { await dropDown.open(); - expect(screen.getByText('No asset properties.')).toBeVisible(); + expect(screen.getAllByText('No asset properties.')[0]).toBeVisible(); }); it('renders drop-down options', async () => { @@ -494,7 +494,9 @@ describe('asset property drop-down', () => { expect(dropDown.getOption(assetModelProperty1)).toBeVisible(); expect(dropDown.getOption(assetModelProperty2)).toBeVisible(); expect(dropDown.queryOption(assetModelProperty3)).not.toBeInTheDocument(); - expect(screen.getByText('(2/3) asset properties matched')).toBeVisible(); + expect( + screen.getAllByText('(2/3) asset properties matched')[0] + ).toBeVisible(); await dropDown.clearFilter(); @@ -507,7 +509,9 @@ describe('asset property drop-down', () => { expect(dropDown.queryOption(assetModelProperty1)).not.toBeInTheDocument(); expect(dropDown.queryOption(assetModelProperty2)).not.toBeInTheDocument(); expect(dropDown.getOption(assetModelProperty3)).toBeVisible(); - expect(screen.getByText('(1/3) asset properties matched')).toBeVisible(); + expect( + screen.getAllByText('(1/3) asset properties matched')[0] + ).toBeVisible(); }); }); }); diff --git a/turbo.json b/turbo.json index e9b1537f2..f4948b7a9 100644 --- a/turbo.json +++ b/turbo.json @@ -12,30 +12,35 @@ "outputLogs": "new-only" }, "clean": { - "cache": false, - "outputLogs": "new-only" + "dependsOn": ["//#clean:root"], + "cache": false }, - "//#clean": { - "cache": false, - "outputLogs": "new-only" + "//#clean:root": { + "cache": false + }, + "clean:turbo": { + "dependsOn": ["//#clean:turbo:root"], + "cache": false + }, + "//#clean:turbo:root": { + "cache": false }, "clean:nuke": { - "cache": false, - "outputLogs": "new-only" + "dependsOn": ["//#clean:nuke:root"], + "cache": false }, - "//#clean:nuke": { - "cache": false, - "outputLogs": "new-only" + "//#clean:nuke:root": { + "cache": false }, "dev": { "dependsOn": [], "persistent": true, - "cache": false, + "outputs": ["node_modules/.cache"], "outputLogs": "full" }, "pack": { - "dependsOn": ["^clean", "clean", "//#clean", "build"], - "cache": false, + "dependsOn": ["^clean", "clean", "build"], + "outputs": ["*.tgz"], "outputLogs": "new-only" }, "lint": { @@ -43,17 +48,390 @@ "outputs": [".cache/**"], "outputLogs": "new-only" }, + "@iot-app-kit/dev-env#lint": { + "dependsOn": [], + "outputs": [".cache/**"], + "outputLogs": "new-only", + "inputs": [ + "$TURBO_DEFAULT$", + "../../configuration/**/*", + "../../packages/core/**/*", + "../../packages/core-util/**/*", + "../../packages/dashboard/**/*", + "../../packages/data-mocked/**/*", + "../../packages/helpers/**/*", + "../../packages/react-components/**/*", + "../../packages/source-iotsitewise/**/*", + "../../packages/source-iottwinmaker/**/*", + "../../packages/testing-util/**/*", + "!../../configuration/**/node_modules/**/*", + "!../../configuration/**/.cache/**/*", + "!../../configuration/**/.turbo/**/*", + "!../../packages/**/node_modules/**/*", + "!../../packages/**/dist/**/*", + "!../../packages/**/.cache/**/*", + "!../../packages/**/.turbo/**/*" + ] + }, + "@iot-app-kit/core#lint": { + "dependsOn": [], + "outputs": [".cache/**"], + "outputLogs": "new-only", + "inputs": [ + "$TURBO_DEFAULT$", + "../../configuration/**/*", + "../../packages/helpers/**/*", + "!../../configuration/**/node_modules/**/*", + "!../../configuration/**/.cache/**/*", + "!../../configuration/**/.turbo/**/*", + "!../../packages/**/node_modules/**/*", + "!../../packages/**/dist/**/*", + "!../../packages/**/.cache/**/*", + "!../../packages/**/.turbo/**/*" + ] + }, + "@iot-app-kit/core-util#lint": { + "dependsOn": [], + "outputs": [".cache/**"], + "outputLogs": "new-only", + "inputs": [ + "$TURBO_DEFAULT$", + "../../configuration/**/*", + "../../packages/core/**/*", + "../../packages/helpers/**/*", + "!../../configuration/**/node_modules/**/*", + "!../../configuration/**/.cache/**/*", + "!../../configuration/**/.turbo/**/*", + "!../../packages/**/node_modules/**/*", + "!../../packages/**/dist/**/*", + "!../../packages/**/.cache/**/*", + "!../../packages/**/.turbo/**/*" + ] + }, + "@iot-app-kit/dashboard#lint": { + "dependsOn": [], + "outputs": [".cache/**"], + "outputLogs": "new-only", + "inputs": [ + "$TURBO_DEFAULT$", + "../../configuration/**/*", + "../../packages/core/**/*", + "../../packages/core-util/**/*", + "../../packages/data-mocked/**/*", + "../../packages/helpers/**/*", + "../../packages/react-components/**/*", + "../../packages/source-iotsitewise/**/*", + "../../packages/source-iottwinmaker/**/*", + "../../packages/testing-util/**/*", + "!../../configuration/**/node_modules/**/*", + "!../../configuration/**/.cache/**/*", + "!../../configuration/**/.turbo/**/*", + "!../../packages/**/node_modules/**/*", + "!../../packages/**/dist/**/*", + "!../../packages/**/.cache/**/*", + "!../../packages/**/.turbo/**/*" + ] + }, + "@iot-app-kit/helpers#lint": { + "dependsOn": [], + "outputs": [".cache/**"], + "outputLogs": "new-only", + "inputs": [ + "$TURBO_DEFAULT$", + "../../configuration/**/*", + "!../../configuration/**/node_modules/**/*", + "!../../configuration/**/.cache/**/*", + "!../../configuration/**/.turbo/**/*", + "!../../packages/**/node_modules/**/*", + "!../../packages/**/dist/**/*", + "!../../packages/**/.cache/**/*", + "!../../packages/**/.turbo/**/*" + ] + }, + "@iot-app-kit/react-components#lint": { + "dependsOn": [], + "outputs": [".cache/**"], + "outputLogs": "new-only", + "inputs": [ + "$TURBO_DEFAULT$", + "../../configuration/**/*", + "../../packages/core/**/*", + "../../packages/core-util/**/*", + "../../packages/helpers/**/*", + "../../packages/source-iotsitewise/**/*", + "../../packages/source-iottwinmaker/**/*", + "../../packages/testing-util/**/*", + "!../../configuration/**/node_modules/**/*", + "!../../configuration/**/.cache/**/*", + "!../../configuration/**/.turbo/**/*", + "!../../packages/**/node_modules/**/*", + "!../../packages/**/dist/**/*", + "!../../packages/**/.cache/**/*", + "!../../packages/**/.turbo/**/*" + ] + }, + "@iot-app-kit/scene-composer#lint": { + "dependsOn": [], + "outputs": [".cache/**"], + "outputLogs": "new-only", + "inputs": [ + "$TURBO_DEFAULT$", + "../../configuration/**/*", + "../../packages/core/**/*", + "../../packages/core-util/**/*", + "../../packages/helpers/**/*", + "../../packages/react-components/**/*", + "../../packages/source-iottwinmaker/**/*", + "!../../configuration/**/node_modules/**/*", + "!../../configuration/**/.cache/**/*", + "!../../configuration/**/.turbo/**/*", + "!../../packages/**/node_modules/**/*", + "!../../packages/**/dist/**/*", + "!../../packages/**/.cache/**/*", + "!../../packages/**/.turbo/**/*" + ] + }, + "@iot-app-kit/source-iotsitewise#lint": { + "dependsOn": [], + "outputs": [".cache/**"], + "outputLogs": "new-only", + "inputs": [ + "$TURBO_DEFAULT$", + "../../configuration/**/*", + "../../packages/core/**/*", + "../../packages/core-util/**/*", + "../../packages/helpers/**/*", + "../../packages/testing-util/**/*", + "!../../configuration/**/node_modules/**/*", + "!../../configuration/**/.cache/**/*", + "!../../configuration/**/.turbo/**/*", + "!../../packages/**/node_modules/**/*", + "!../../packages/**/dist/**/*", + "!../../packages/**/.cache/**/*", + "!../../packages/**/.turbo/**/*" + ] + }, + "@iot-app-kit/source-iottwinmaker#lint": { + "dependsOn": [], + "outputs": [".cache/**"], + "outputLogs": "new-only", + "inputs": [ + "$TURBO_DEFAULT$", + "../../configuration/**/*", + "../core/**/*", + "../helpers/**/*", + "!../../configuration/**/node_modules/**/*", + "!../../configuration/**/.cache/**/*", + "!../../configuration/**/.turbo/**/*", + "!../../packages/**/node_modules/**/*", + "!../../packages/**/dist/**/*", + "!../../packages/**/.cache/**/*", + "!../../packages/**/.turbo/**/*" + ] + }, + "@iot-app-kit/tools-iottwinmaker#lint": { + "dependsOn": [], + "outputs": [".cache/**"], + "outputLogs": "new-only", + "inputs": [ + "$TURBO_DEFAULT$", + "../../configuration/**/*", + "!../../configuration/**/node_modules/**/*", + "!../../configuration/**/.cache/**/*", + "!../../configuration/**/.turbo/**/*", + "!../../packages/**/node_modules/**/*", + "!../../packages/**/dist/**/*", + "!../../packages/**/.cache/**/*", + "!../../packages/**/.turbo/**/*" + ] + }, "fix": { "dependsOn": [], "cache": false, - "outputs": [".cache/**"], - "outputLogs": "new-only" + "outputs": [".cache/**"] }, "test": { "dependsOn": [], - "outputs": ["coverage/**", ".cache/**"], + "outputs": ["node_modules/.vite"], "outputLogs": "new-only" }, + "@iot-app-kit/core#test": { + "dependsOn": [], + "outputs": ["node_modules/.vite"], + "outputLogs": "new-only", + "inputs": [ + "$TURBO_DEFAULT$", + "../../configuration/**/*", + "../../packages/helpers/**/*", + "!../../configuration/**/node_modules/**/*", + "!../../configuration/**/.cache/**/*", + "!../../configuration/**/.turbo/**/*", + "!../../packages/**/node_modules/**/*", + "!../../packages/**/dist/**/*", + "!../../packages/**/.cache/**/*", + "!../../packages/**/.turbo/**/*" + ] + }, + "@iot-app-kit/core-util#test": { + "dependsOn": [], + "outputs": ["node_modules/.vite"], + "outputLogs": "new-only", + "inputs": [ + "$TURBO_DEFAULT$", + "../../configuration/**/*", + "../../packages/core/**/*", + "../../packages/helpers/**/*", + "!../../configuration/**/node_modules/**/*", + "!../../configuration/**/.cache/**/*", + "!../../configuration/**/.turbo/**/*", + "!../../packages/**/node_modules/**/*", + "!../../packages/**/dist/**/*", + "!../../packages/**/.cache/**/*", + "!../../packages/**/.turbo/**/*" + ] + }, + "@iot-app-kit/dashboard#test": { + "dependsOn": [], + "outputs": ["node_modules/.vite"], + "outputLogs": "new-only", + "inputs": [ + "$TURBO_DEFAULT$", + "../../configuration/**/*", + "../../packages/core/**/*", + "../../packages/core-util/**/*", + "../../packages/data-mocked/**/*", + "../../packages/helpers/**/*", + "../../packages/react-components/**/*", + "../../packages/source-iotsitewise/**/*", + "../../packages/source-iottwinmaker/**/*", + "../../packages/testing-util/**/*", + "!../../configuration/**/node_modules/**/*", + "!../../configuration/**/.cache/**/*", + "!../../configuration/**/.turbo/**/*", + "!../../packages/**/node_modules/**/*", + "!../../packages/**/dist/**/*", + "!../../packages/**/.cache/**/*", + "!../../packages/**/.turbo/**/*" + ] + }, + "@iot-app-kit/helpers#test": { + "dependsOn": [], + "outputs": ["node_modules/.vite"], + "outputLogs": "new-only", + "inputs": [ + "$TURBO_DEFAULT$", + "../../configuration/**/*", + "!../../configuration/**/node_modules/**/*", + "!../../configuration/**/.cache/**/*", + "!../../configuration/**/.turbo/**/*", + "!../../packages/**/node_modules/**/*", + "!../../packages/**/dist/**/*", + "!../../packages/**/.cache/**/*", + "!../../packages/**/.turbo/**/*" + ] + }, + "@iot-app-kit/react-components#test": { + "dependsOn": [], + "outputs": ["node_modules/.vite"], + "outputLogs": "new-only", + "inputs": [ + "$TURBO_DEFAULT$", + "../../configuration/**/*", + "../../packages/core/**/*", + "../../packages/core-util/**/*", + "../../packages/helpers/**/*", + "../../packages/source-iotsitewise/**/*", + "../../packages/source-iottwinmaker/**/*", + "../../packages/testing-util/**/*", + "!../../configuration/**/node_modules/**/*", + "!../../configuration/**/.cache/**/*", + "!../../configuration/**/.turbo/**/*", + "!../../packages/**/node_modules/**/*", + "!../../packages/**/dist/**/*", + "!../../packages/**/.cache/**/*", + "!../../packages/**/.turbo/**/*" + ] + }, + "@iot-app-kit/scene-composer#test": { + "dependsOn": [], + "outputs": ["node_modules/.vite"], + "outputLogs": "new-only", + "inputs": [ + "$TURBO_DEFAULT$", + "../../configuration/**/*", + "../../packages/core/**/*", + "../../packages/core-util/**/*", + "../../packages/helpers/**/*", + "../../packages/react-components/**/*", + "../../packages/source-iottwinmaker/**/*", + "!../../configuration/**/node_modules/**/*", + "!../../configuration/**/.cache/**/*", + "!../../configuration/**/.turbo/**/*", + "!../../packages/**/node_modules/**/*", + "!../../packages/**/dist/**/*", + "!../../packages/**/.cache/**/*", + "!../../packages/**/.turbo/**/*" + ] + }, + "@iot-app-kit/source-iotsitewise#test": { + "dependsOn": [], + "outputs": ["node_modules/.vite"], + "outputLogs": "new-only", + "inputs": [ + "$TURBO_DEFAULT$", + "../../configuration/**/*", + "../../packages/core/**/*", + "../../packages/core-util/**/*", + "../../packages/helpers/**/*", + "../../packages/testing-util/**/*", + "!../../configuration/**/node_modules/**/*", + "!../../configuration/**/.cache/**/*", + "!../../configuration/**/.turbo/**/*", + "!../../packages/**/node_modules/**/*", + "!../../packages/**/dist/**/*", + "!../../packages/**/.cache/**/*", + "!../../packages/**/.turbo/**/*" + ] + }, + "@iot-app-kit/source-iottwinmaker#test": { + "dependsOn": [], + "outputs": ["node_modules/.vite"], + "outputLogs": "new-only", + "inputs": [ + "$TURBO_DEFAULT$", + "../../configuration/**/*", + "../core/**/*", + "../helpers/**/*", + "!../../configuration/**/node_modules/**/*", + "!../../configuration/**/.cache/**/*", + "!../../configuration/**/.turbo/**/*", + "!../../packages/**/node_modules/**/*", + "!../../packages/**/dist/**/*", + "!../../packages/**/.cache/**/*", + "!../../packages/**/.turbo/**/*" + ] + }, + "@iot-app-kit/tools-iottwinmaker#test": { + "dependsOn": [], + "outputs": ["node_modules/.vite"], + "outputLogs": "new-only", + "inputs": [ + "$TURBO_DEFAULT$", + "../../configuration/**/*", + "!../../configuration/**/node_modules/**/*", + "!../../configuration/**/.cache/**/*", + "!../../configuration/**/.turbo/**/*", + "!../../packages/**/node_modules/**/*", + "!../../packages/**/dist/**/*", + "!../../packages/**/.cache/**/*", + "!../../packages/**/.turbo/**/*" + ] + }, + "test:watch": { + "dependsOn": [], + "outputs": ["node_modules/.vite"], + "persistent": true + }, "test:ui": { "dependsOn": [], "env": ["CI"], @@ -64,6 +442,74 @@ "env": ["CI"], "outputLogs": "new-only" }, + "@iot-app-kit/dev-env#test:ui:ci": { + "dependsOn": [], + "env": ["CI"], + "outputLogs": "new-only", + "inputs": [ + "$TURBO_DEFAULT$", + "../../configuration/**/*", + "../../packages/core/**/*", + "../../packages/core-util/**/*", + "../../packages/dashboard/**/*", + "../../packages/data-mocked/**/*", + "../../packages/helpers/**/*", + "../../packages/react-components/**/*", + "../../packages/source-iotsitewise/**/*", + "../../packages/source-iottwinmaker/**/*", + "../../packages/testing-util/**/*", + "!../../configuration/**/node_modules/**/*", + "!../../configuration/**/.cache/**/*", + "!../../configuration/**/.turbo/**/*", + "!../../packages/**/node_modules/**/*", + "!../../packages/**/dist/**/*", + "!../../packages/**/.cache/**/*", + "!../../packages/**/.turbo/**/*" + ] + }, + "@iot-app-kit/react-components#test:ui:ci": { + "dependsOn": [], + "env": ["CI"], + "outputLogs": "new-only", + "inputs": [ + "$TURBO_DEFAULT$", + "../../configuration/**/*", + "../../packages/core/**/*", + "../../packages/core-util/**/*", + "../../packages/helpers/**/*", + "../../packages/source-iotsitewise/**/*", + "../../packages/source-iottwinmaker/**/*", + "../../packages/testing-util/**/*", + "!../../configuration/**/node_modules/**/*", + "!../../configuration/**/.cache/**/*", + "!../../configuration/**/.turbo/**/*", + "!../../packages/**/node_modules/**/*", + "!../../packages/**/dist/**/*", + "!../../packages/**/.cache/**/*", + "!../../packages/**/.turbo/**/*" + ] + }, + "@iot-app-kit/scene-composer#test:ui:ci": { + "dependsOn": [], + "env": ["CI"], + "outputLogs": "new-only", + "inputs": [ + "$TURBO_DEFAULT$", + "../../configuration/**/*", + "../../packages/core/**/*", + "../../packages/core-util/**/*", + "../../packages/helpers/**/*", + "../../packages/react-components/**/*", + "../../packages/source-iottwinmaker/**/*", + "!../../configuration/**/node_modules/**/*", + "!../../configuration/**/.cache/**/*", + "!../../configuration/**/.turbo/**/*", + "!../../packages/**/node_modules/**/*", + "!../../packages/**/dist/**/*", + "!../../packages/**/.cache/**/*", + "!../../packages/**/.turbo/**/*" + ] + }, "start": { "dependsOn": ["^build"], "env": [