diff --git a/.github/workflows/ai-eval.yml b/.github/workflows/ai-eval.yml index 9abb5372cd..8096295140 100644 --- a/.github/workflows/ai-eval.yml +++ b/.github/workflows/ai-eval.yml @@ -67,7 +67,7 @@ jobs: runs-on: ${{ inputs.runner || 'ubuntu-latest' }} timeout-minutes: 10 steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 - uses: actions/setup-go@v6 with: go-version-file: go.mod @@ -89,7 +89,7 @@ jobs: runs-on: ${{ inputs.runner || 'ubuntu-latest' }} timeout-minutes: 15 steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 - uses: actions/setup-go@v6 with: go-version-file: go.mod @@ -100,7 +100,7 @@ jobs: run: make ai-eval-full - name: Upload JUnit report if: always() - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7.0.1 with: name: ai-eval-junit path: ai-eval.junit.xml @@ -115,7 +115,7 @@ jobs: JUDGE_PROVIDER: ${{ secrets.JUDGE_PROVIDER }} JUDGE_API_KEY: ${{ secrets.JUDGE_API_KEY }} steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 - uses: actions/setup-go@v6 with: go-version-file: go.mod @@ -134,7 +134,7 @@ jobs: run: make ai-eval-judged - name: Upload judged JUnit report if: steps.gate.outputs.judge == 'enabled' - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7.0.1 with: name: ai-eval-judged-junit path: ai-eval.judged.junit.xml diff --git a/.github/workflows/backup-restore-drill.yml b/.github/workflows/backup-restore-drill.yml index 1967b15e3e..05a44bdb11 100644 --- a/.github/workflows/backup-restore-drill.yml +++ b/.github/workflows/backup-restore-drill.yml @@ -74,7 +74,7 @@ jobs: TARGET_DB: teslasync_drill_restored TARGET_GUARD: restore-drill-${{ github.run_id }}-${{ github.run_attempt }} steps: - - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6 with: @@ -417,7 +417,7 @@ jobs: - name: Upload drill evidence if: always() - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: restore-drill-${{ github.run_id }}-${{ github.run_attempt }} path: | diff --git a/.github/workflows/capacity-test.yml b/.github/workflows/capacity-test.yml index 052e46e80b..da5a5ec9ea 100644 --- a/.github/workflows/capacity-test.yml +++ b/.github/workflows/capacity-test.yml @@ -61,7 +61,7 @@ jobs: # Below safety.max_duration (30m) with room for stack boot/teardown. timeout-minutes: 40 steps: - - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6 with: @@ -126,7 +126,7 @@ jobs: - name: Install k6 if: ${{ inputs.profile != 'reconnect-storm' }} - uses: grafana/setup-k6-action@db07bd9765aac508ef18982e52ab937fe633a065 # v1.2.1 + uses: grafana/setup-k6-action@43b9fc21641a76002687994433dd586f56e791b1 # v1.2.2 with: k6-version: v1.8.1 @@ -266,7 +266,7 @@ jobs: - name: Upload k6 summaries if: always() - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: capacity-${{ inputs.profile }}-${{ github.run_number }} path: | diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index be3ae426e5..c98d2d945a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -41,7 +41,7 @@ jobs: # feature mirror, the SLO rules/dashboards). runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 - uses: actions/setup-node@v5 with: node-version: "26" @@ -73,7 +73,7 @@ jobs: matrix: check: [lint, architecture] steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 - uses: actions/setup-go@v6 with: go-version-file: go.mod @@ -120,7 +120,7 @@ jobs: --health-timeout 5s --health-retries 10 steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 - uses: actions/setup-go@v6 with: go-version-file: go.mod @@ -140,7 +140,7 @@ jobs: go test -race -coverprofile=shard/coverage.out -covermode=atomic -json "${packages[@]}" | tee shard/test-events.json - name: Upload raw shard evidence if: always() - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7.0.1 with: name: backend-test-${{ matrix.shard }} path: shard/ @@ -155,7 +155,7 @@ jobs: env: CGO_ENABLED: 1 steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 - uses: actions/setup-go@v6 with: go-version-file: go.mod @@ -182,7 +182,7 @@ jobs: - name: Upload coverage if: always() - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7.0.1 with: name: backend-coverage if-no-files-found: error @@ -217,7 +217,7 @@ jobs: --health-timeout 5s --health-retries 10 steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 - uses: actions/setup-go@v6 with: go-version-file: go.mod @@ -267,7 +267,7 @@ jobs: matrix: binary: [teslasync, notification-worker, export-worker] steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 - uses: actions/setup-go@v6 with: go-version-file: go.mod @@ -299,7 +299,7 @@ jobs: run: working-directory: web steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 - uses: actions/setup-node@v5 with: node-version: "26" @@ -337,7 +337,7 @@ jobs: run: working-directory: web steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 - uses: actions/setup-node@v5 with: node-version: "26" @@ -353,7 +353,7 @@ jobs: --reporter=default --reporter=blob - name: Upload raw shard evidence if: always() - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7.0.1 with: name: frontend-test-${{ matrix.shard }} path: web/.vitest-reports/ @@ -370,7 +370,7 @@ jobs: run: working-directory: web steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 - uses: actions/setup-node@v5 with: @@ -405,7 +405,7 @@ jobs: - name: Upload coverage if: always() - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7.0.1 with: name: frontend-coverage path: web/coverage/ @@ -447,7 +447,7 @@ jobs: - image: web file: Dockerfile.web steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 - uses: docker/setup-buildx-action@v4 - name: Build ${{ matrix.image }} diff --git a/.github/workflows/cleanup.yml b/.github/workflows/cleanup.yml index 1cfaa5d459..ada7e63d8c 100644 --- a/.github/workflows/cleanup.yml +++ b/.github/workflows/cleanup.yml @@ -35,7 +35,7 @@ jobs: contents: read packages: write steps: - - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - uses: actions/setup-node@v5 with: node-version: '22' @@ -49,7 +49,7 @@ jobs: run: node scripts/package-retention.mjs - name: Upload retention report if: always() - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: package-retention-report path: | diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml index 547f8b50f0..b7e63eb17c 100644 --- a/.github/workflows/copilot-setup-steps.yml +++ b/.github/workflows/copilot-setup-steps.yml @@ -32,7 +32,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v5 + uses: actions/checkout@v7 # ── Go toolchain ────────────────────────────────────────── - name: Set up Go diff --git a/.github/workflows/deploy-rollback.yml b/.github/workflows/deploy-rollback.yml index 73ad008073..300595d022 100644 --- a/.github/workflows/deploy-rollback.yml +++ b/.github/workflows/deploy-rollback.yml @@ -96,7 +96,7 @@ jobs: verdict: ${{ steps.evaluate.outputs.verdict }} automation_allowed: ${{ steps.evaluate.outputs.automation_allowed }} steps: - - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6 with: @@ -155,7 +155,7 @@ jobs: - name: Upload decision if: always() - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: rollback-decision-${{ github.run_number }} path: decision.json @@ -189,7 +189,7 @@ jobs: # a production rollback safe. environment: ${{ inputs.environment }} steps: - - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6 with: diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 56fcdbbc29..39aec44fa9 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -32,7 +32,7 @@ jobs: name: github-pages url: ${{ steps.deployment.outputs.page_url }} steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 with: fetch-depth: 0 diff --git a/.github/workflows/fleet-proto-drift.yml b/.github/workflows/fleet-proto-drift.yml index bdd2475b2a..abf3c68f23 100644 --- a/.github/workflows/fleet-proto-drift.yml +++ b/.github/workflows/fleet-proto-drift.yml @@ -17,7 +17,7 @@ jobs: check: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 - name: Test the drift detector run: python3 -m unittest discover -s scripts -p 'test_check_fleet_proto_drift.py' - name: Fetch the current upstream schema at a fixed revision diff --git a/.github/workflows/frontend-quality.yml b/.github/workflows/frontend-quality.yml index 14c620d8aa..9579ee64c5 100644 --- a/.github/workflows/frontend-quality.yml +++ b/.github/workflows/frontend-quality.yml @@ -40,7 +40,7 @@ jobs: name: Route registry and test discovery runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 - uses: actions/setup-node@v5 with: node-version: '26' @@ -73,7 +73,7 @@ jobs: name: Shared hermetic browser build runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 - uses: actions/setup-node@v5 with: node-version: '26' @@ -83,7 +83,7 @@ jobs: - run: npm run e2e:build env: E2E_MOCKS: '1' - - uses: actions/upload-artifact@v6 + - uses: actions/upload-artifact@v7.0.1 with: name: e2e-app path: web/e2e/.app-dist/ @@ -106,7 +106,7 @@ jobs: - {name: accessibility, suite: a11y, shard: '1/1'} - {name: performance, suite: performance, shard: '1/1'} steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 - uses: actions/setup-node@v5 with: node-version: '26' @@ -125,7 +125,7 @@ jobs: run: npm run e2e:${{ matrix.suite }} -- --shard=${{ matrix.shard }} - name: Upload Chromium failure evidence if: always() - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7.0.1 with: name: chromium-${{ matrix.name }}-report if-no-files-found: ignore @@ -158,7 +158,7 @@ jobs: matrix: browser: [firefox, webkit] steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 - uses: actions/setup-node@v5 with: node-version: '26' @@ -177,7 +177,7 @@ jobs: run: npm run e2e -- --project=${{ matrix.browser }}-smoke - name: Upload engine failure evidence if: always() - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7.0.1 with: name: ${{ matrix.browser }}-smoke-report if-no-files-found: ignore @@ -195,7 +195,7 @@ jobs: matrix: shard: [1, 2, 3, 4] steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 - uses: actions/setup-node@v5 with: node-version: '26' @@ -214,7 +214,7 @@ jobs: run: npm run e2e:visual -- --shard=${{ matrix.shard }}/4 --workers=2 - name: Upload visual diffs if: always() - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7.0.1 with: name: visual-regression-report-${{ matrix.shard }} if-no-files-found: ignore @@ -244,7 +244,7 @@ jobs: runs-on: ubuntu-latest needs: contract steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 - uses: actions/setup-node@v5 with: node-version: '26' @@ -283,7 +283,7 @@ jobs: rm -rf test-results playwright-report blob-report - name: Upload sanitized deployed smoke status if: always() - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7.0.1 with: name: authenticated-production-smoke-status if-no-files-found: error diff --git a/.github/workflows/helm-ci.yml b/.github/workflows/helm-ci.yml index 97932eb4ce..1b1a4e7740 100644 --- a/.github/workflows/helm-ci.yml +++ b/.github/workflows/helm-ci.yml @@ -33,7 +33,7 @@ jobs: name: Lint Chart runs-on: ${{ inputs.runner || 'ubuntu-latest' }} steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 with: fetch-depth: 0 @@ -69,7 +69,7 @@ jobs: name: Template Validation runs-on: ${{ inputs.runner || 'ubuntu-latest' }} steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 - uses: azure/setup-helm@v5 with: @@ -148,7 +148,7 @@ jobs: name: Schema Validation runs-on: ${{ inputs.runner || 'ubuntu-latest' }} steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 - uses: azure/setup-helm@v5 with: @@ -171,7 +171,7 @@ jobs: runs-on: ${{ inputs.runner || 'ubuntu-latest' }} if: github.event_name == 'pull_request' steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 with: fetch-depth: 0 diff --git a/.github/workflows/load-test.yml b/.github/workflows/load-test.yml index 3840b0780f..3ce4dac92d 100644 --- a/.github/workflows/load-test.yml +++ b/.github/workflows/load-test.yml @@ -48,7 +48,7 @@ jobs: runs-on: ${{ github.event.inputs.runner || 'ubuntu-latest' }} timeout-minutes: 30 steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 - name: Boot ephemeral TeslaSync stack env: @@ -91,7 +91,7 @@ jobs: - name: Upload k6 summary if: always() - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7.0.1 with: name: k6-summary-${{ github.run_number }} path: tests/k6/summary.json @@ -104,7 +104,7 @@ jobs: - name: Upload API logs if: failure() - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7.0.1 with: name: api-logs-${{ github.run_number }} path: api.log diff --git a/.github/workflows/ops-gate.yml b/.github/workflows/ops-gate.yml index ab697d8d3c..895cc88dac 100644 --- a/.github/workflows/ops-gate.yml +++ b/.github/workflows/ops-gate.yml @@ -37,7 +37,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 15 steps: - - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6 with: @@ -91,7 +91,7 @@ jobs: PGPASSWORD: fixture DB_URL: postgres://fixture:fixture@localhost:5432/teslasync_fixture?sslmode=disable steps: - - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6 with: @@ -153,7 +153,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 10 steps: - - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6 with: diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index e4c7b68427..0d3c4cb36a 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -35,7 +35,7 @@ jobs: run: working-directory: web steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 - uses: actions/setup-node@v5 with: diff --git a/.github/workflows/post-deploy-smoke.yml b/.github/workflows/post-deploy-smoke.yml index 70dd7f5b26..a0d71ae76f 100644 --- a/.github/workflows/post-deploy-smoke.yml +++ b/.github/workflows/post-deploy-smoke.yml @@ -76,7 +76,7 @@ jobs: outputs: passed: ${{ steps.run.outputs.passed }} steps: - - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6 with: @@ -115,7 +115,7 @@ jobs: - name: Upload smoke report if: always() - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: smoke-report-${{ github.run_number }} path: smoke-report.json diff --git a/.github/workflows/proto-gen-check.yml b/.github/workflows/proto-gen-check.yml index 8be9d14d5a..cdc8b876c2 100644 --- a/.github/workflows/proto-gen-check.yml +++ b/.github/workflows/proto-gen-check.yml @@ -20,7 +20,7 @@ jobs: name: Verify generated Tesla protomodel matches proto runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 - uses: actions/setup-go@v6 with: go-version-file: go.mod diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6a633b69a7..5664d3a214 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -63,7 +63,7 @@ jobs: fi done - - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 @@ -187,7 +187,7 @@ jobs: - image: fleet-telemetry file: Dockerfile.fleet-telemetry steps: - - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 # v4 - name: Prepare the promotion directory @@ -314,7 +314,7 @@ jobs: timeout: 30m - name: Upload vulnerability scan - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: vuln-${{ matrix.image }}-${{ needs.version.outputs.version }} path: vuln-${{ matrix.image }}.json @@ -324,7 +324,7 @@ jobs: # version, so legs cannot collide and a publish job cannot pick up # another image's bytes. - name: Upload the promotable image archive - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: image-${{ matrix.image }}-${{ needs.version.outputs.version }} path: | @@ -347,7 +347,7 @@ jobs: summary: ${{ steps.aggregate.outputs.summary }} blocking: ${{ steps.aggregate.outputs.blocking }} steps: - - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Download vulnerability scans uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 @@ -405,7 +405,7 @@ jobs: - name: Upload vulnerability status if: always() - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: vulnerability-status-${{ needs.version.outputs.version }} path: vulnerability-status.md @@ -427,7 +427,7 @@ jobs: # No `file` / `build-args` here: this stage does NOT build. image: [api, web, notification-worker, export-worker, automation-worker, fleet-telemetry] steps: - - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6 with: @@ -606,7 +606,7 @@ jobs: echo "✅ Attested CycloneDX SBOM to ${PRIMARY}@${DIGEST}" - name: Upload SBOM artifacts - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: sbom-${{ matrix.image }}-${{ needs.version.outputs.version }} path: | @@ -625,7 +625,7 @@ jobs: # It is bound to the DIGEST, not the tag, so re-tagging cannot # transplant provenance onto different bytes. - name: Attest build provenance - uses: actions/attest-build-provenance@977bb373ede98d70efdf65b84cb5f73e068dcc2a # v3 + uses: actions/attest-build-provenance@4d101475d8b20a2381f78447822ac1eab6504dd8 # v4.2.2 with: subject-name: ghcr.io/${{ github.repository }}-${{ matrix.image }} subject-digest: ${{ steps.promote.outputs.digest }} @@ -639,7 +639,7 @@ jobs: contents: read packages: write steps: - - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install Helm uses: azure/setup-helm@9bc31f4ebc9c6b171d7bfbaa5d006ae7abdb4310 # v5.0.1 @@ -678,7 +678,7 @@ jobs: contents: write packages: read steps: - - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 diff --git a/.github/workflows/security.yml b/.github/workflows/security.yml index 4729031bf5..788c811e53 100644 --- a/.github/workflows/security.yml +++ b/.github/workflows/security.yml @@ -52,7 +52,7 @@ jobs: name: Security Scan runs-on: ${{ inputs.runner || 'ubuntu-latest' }} steps: - - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install CodeQL runtime prerequisites run: | @@ -218,12 +218,12 @@ jobs: node-version: "26" - name: Initialize CodeQL - uses: github/codeql-action/init@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4.38.0 + uses: github/codeql-action/init@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2 with: languages: go,javascript-typescript - name: CodeQL autobuild - uses: github/codeql-action/autobuild@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4.38.0 + uses: github/codeql-action/autobuild@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2 - name: CodeQL analysis - uses: github/codeql-action/analyze@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4.38.0 + uses: github/codeql-action/analyze@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2 diff --git a/.github/workflows/si-canonical-gate.yml b/.github/workflows/si-canonical-gate.yml index b2fed3bbac..c6ccc582c2 100644 --- a/.github/workflows/si-canonical-gate.yml +++ b/.github/workflows/si-canonical-gate.yml @@ -40,7 +40,7 @@ jobs: name: Block new legacy unit-suffixed identifiers runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 with: # Fetch enough history to compute the diff against the merge # base. depth: 0 is wasteful but reliable on shallow clones. diff --git a/Dockerfile.web b/Dockerfile.web index 81de76bf0d..6b933892a1 100644 --- a/Dockerfile.web +++ b/Dockerfile.web @@ -70,7 +70,7 @@ RUN npm run build RUN find dist -name '*.map' -delete # Serve with a supported, digest-pinned nginx runtime. -FROM nginx:1.31.4-alpine3.24@sha256:db35bfc6b2951e7f8a72db5db120288c127ffaeeb4a6d4b95a26fead017d5913 +FROM nginx:1.31.5-alpine3.24@sha256:72ba65eb42c10344912a84ff42408db7d34f2feb642204570ab8fc5ffd29f1d3 RUN apk upgrade --no-cache diff --git a/go.mod b/go.mod index 226d42107e..fd5ce60d06 100644 --- a/go.mod +++ b/go.mod @@ -7,15 +7,15 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.4 github.com/SherClockHolmes/webpush-go v1.4.0 github.com/alicebob/miniredis/v2 v2.38.0 - github.com/aws/aws-sdk-go-v2 v1.41.5 - github.com/aws/aws-sdk-go-v2/config v1.32.13 - github.com/aws/aws-sdk-go-v2/credentials v1.19.13 + github.com/aws/aws-sdk-go-v2 v1.47.0 + github.com/aws/aws-sdk-go-v2/config v1.33.5 + github.com/aws/aws-sdk-go-v2/credentials v1.20.5 github.com/aws/aws-sdk-go-v2/service/s3 v1.98.0 github.com/caarlos0/env/v11 v11.4.1 github.com/eclipse/paho.mqtt.golang v1.5.1 github.com/exaring/otelpgx v0.10.0 github.com/go-chi/chi/v5 v5.3.0 - github.com/go-chi/cors v1.2.1 + github.com/go-chi/cors v1.2.2 github.com/go-chi/httprate v0.16.0 github.com/golang-migrate/migrate/v4 v4.19.1 github.com/google/uuid v1.6.0 @@ -25,10 +25,10 @@ require ( github.com/pquerna/otp v1.5.0 github.com/prometheus/client_golang v1.24.1 github.com/prometheus/client_model v0.6.2 - github.com/prometheus/common v0.70.1 + github.com/prometheus/common v0.71.0 github.com/redis/go-redis/v9 v9.18.0 github.com/robfig/cron/v3 v3.0.1 - github.com/rs/zerolog v1.32.0 + github.com/rs/zerolog v1.35.1 github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e github.com/sony/gobreaker v0.5.0 github.com/teslamotors/fleet-telemetry v0.9.5-0.20260924184623-3d366a3da23c @@ -38,7 +38,7 @@ require ( go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.45.0 go.opentelemetry.io/otel/sdk v1.45.0 go.opentelemetry.io/otel/trace v1.45.0 - golang.org/x/sync v0.22.0 + golang.org/x/sync v0.23.0 golang.org/x/time v0.15.0 golang.org/x/tools v0.49.0 google.golang.org/api v0.294.0 @@ -61,20 +61,19 @@ require ( github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0 // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.21 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.21 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.21 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.22 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.20.0 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.5.3 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.8.3 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.5.3 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.19 // indirect github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.13 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.21 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.14.3 // indirect github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.21 // indirect - github.com/aws/aws-sdk-go-v2/service/signin v1.0.9 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.30.14 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.18 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.41.10 // indirect - github.com/aws/smithy-go v1.24.2 // indirect + github.com/aws/aws-sdk-go-v2/service/signin v1.10.0 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.38.0 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.43.0 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.51.0 // indirect + github.com/aws/smithy-go v1.28.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc // indirect github.com/cenkalti/backoff/v5 v5.0.3 // indirect @@ -101,8 +100,8 @@ require ( github.com/klauspost/cpuid/v2 v2.2.10 // indirect github.com/kylelemons/godebug v1.1.0 // indirect github.com/lib/pq v1.10.9 // indirect - github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.19 // indirect + github.com/mattn/go-colorable v0.1.14 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect diff --git a/go.sum b/go.sum index 48d1b090c5..4694b08eea 100644 --- a/go.sum +++ b/go.sum @@ -46,48 +46,44 @@ github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERo github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/SherClockHolmes/webpush-go v1.4.0 h1:ocnzNKWN23T9nvHi6IfyrQjkIc0oJWv1B1pULsf9i3s= github.com/SherClockHolmes/webpush-go v1.4.0/go.mod h1:XSq8pKX11vNV8MJEMwjrlTkxhAj1zKfxmyhdV7Pd6UA= -github.com/alicebob/miniredis/v2 v2.37.0 h1:RheObYW32G1aiJIj81XVt78ZHJpHonHLHW7OLIshq68= -github.com/alicebob/miniredis/v2 v2.37.0/go.mod h1:TcL7YfarKPGDAthEtl5NBeHZfeUQj6OXMm/+iu5cLMM= github.com/alicebob/miniredis/v2 v2.38.0 h1:nZAzCR+Lj+Vxk4ZXzm2NuKq2O33RXj1XxJ2e2uP9jiw= github.com/alicebob/miniredis/v2 v2.38.0/go.mod h1:TcL7YfarKPGDAthEtl5NBeHZfeUQj6OXMm/+iu5cLMM= -github.com/aws/aws-sdk-go-v2 v1.41.5 h1:dj5kopbwUsVUVFgO4Fi5BIT3t4WyqIDjGKCangnV/yY= -github.com/aws/aws-sdk-go-v2 v1.41.5/go.mod h1:mwsPRE8ceUUpiTgF7QmQIJ7lgsKUPQOUl3o72QBrE1o= +github.com/aws/aws-sdk-go-v2 v1.47.0 h1:0jsHallhJCeaU0Ko48c/3FK1ctOQ7NpzggxriJOQ8MQ= +github.com/aws/aws-sdk-go-v2 v1.47.0/go.mod h1:bttEH6JqnUL8LepvDVfdrds/fZ5bCIxzpe3abyUrhDU= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 h1:eBMB84YGghSocM7PsjmmPffTa+1FBUeNvGvFou6V/4o= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8/go.mod h1:lyw7GFp3qENLh7kwzf7iMzAxDn+NzjXEAGjKS2UOKqI= -github.com/aws/aws-sdk-go-v2/config v1.32.13 h1:5KgbxMaS2coSWRrx9TX/QtWbqzgQkOdEa3sZPhBhCSg= -github.com/aws/aws-sdk-go-v2/config v1.32.13/go.mod h1:8zz7wedqtCbw5e9Mi2doEwDyEgHcEE9YOJp6a8jdSMY= -github.com/aws/aws-sdk-go-v2/credentials v1.19.13 h1:mA59E3fokBvyEGHKFdnpNNrvaR351cqiHgRg+JzOSRI= -github.com/aws/aws-sdk-go-v2/credentials v1.19.13/go.mod h1:yoTXOQKea18nrM69wGF9jBdG4WocSZA1h38A+t/MAsk= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.21 h1:NUS3K4BTDArQqNu2ih7yeDLaS3bmHD0YndtA6UP884g= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.21/go.mod h1:YWNWJQNjKigKY1RHVJCuupeWDrrHjRqHm0N9rdrWzYI= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.21 h1:Rgg6wvjjtX8bNHcvi9OnXWwcE0a2vGpbwmtICOsvcf4= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.21/go.mod h1:A/kJFst/nm//cyqonihbdpQZwiUhhzpqTsdbhDdRF9c= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.21 h1:PEgGVtPoB6NTpPrBgqSE5hE/o47Ij9qk/SEZFbUOe9A= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.21/go.mod h1:p+hz+PRAYlY3zcpJhPwXlLC4C+kqn70WIHwnzAfs6ps= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 h1:qYQ4pzQ2Oz6WpQ8T3HvGHnZydA72MnLuFK9tJwmrbHw= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6/go.mod h1:O3h0IK87yXci+kg6flUKzJnWeziQUKciKrLjcatSNcY= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.22 h1:rWyie/PxDRIdhNf4DzRk0lvjVOqFJuNnO8WwaIRVxzQ= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.22/go.mod h1:zd/JsJ4P7oGfUhXn1VyLqaRZwPmZwg44Jf2dS84Dm3Y= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 h1:5EniKhLZe4xzL7a+fU3C2tfUN4nWIqlLesfrjkuPFTY= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7/go.mod h1:x0nZssQ3qZSnIcePWLvcoFisRXJzcTVvYpAAdYX8+GI= +github.com/aws/aws-sdk-go-v2/config v1.33.5 h1:UA1dmokBFOLFoOyVBhO6HjM6edy0MIk5AZSkJVcksQw= +github.com/aws/aws-sdk-go-v2/config v1.33.5/go.mod h1:Dop8axzz0xx38GExIYWXdeyc8QQ7Cr+nPsxpD/LYy4U= +github.com/aws/aws-sdk-go-v2/credentials v1.20.5 h1:wklUVvHMc9xTQ3rcp49/ISpiMnhbCicJcA6n6S8m7J8= +github.com/aws/aws-sdk-go-v2/credentials v1.20.5/go.mod h1:fyEdrn6ccLFOkoK84j5bQyGTxp9zPt5l2XMhxf4DVZs= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.20.0 h1:AM4hHjww+PSFtt6E+UrBrPlZkWsePCLEt9AjkfQX+yM= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.20.0/go.mod h1:3x/yXezeQjpOvBb4jEMxrS8SXvpdvJ5abv6l5c1gWM8= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.5.3 h1:Hp/VgjP0BysR3OgLlR057Vz2LcbbVnoWeJ+3qWiS/fY= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.5.3/go.mod h1:nwGV5qw7F1IZPgxCvA/ph8N2TAuz+BkRG/bXn808qMA= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.8.3 h1:MUaM4f+kj1ZIBPZfUS8cxP1GKXXZtHJjAthy93AN7SM= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.8.3/go.mod h1:6YmVmEVRI5ZZzRjCSsb9SryKH0hAlMRdgA7kG9aDvBU= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.5.3 h1:fuSCw4Z2qfRCztMPO3GXJNSiEp6Wee+WOLwrHHUMy9c= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.5.3/go.mod h1:6SxcHheD1pPR5+kWm1wGvjlL/YqUsh267sAfEmN4K7A= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.19 h1:bAdDl/HkGCcGPoe25ToSHEw23VIxt6CT5fLcg111BKg= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.19/go.mod h1:KaUzbLxv4CeSxh6ZCl9B4m7CuFenS8kUEaDs+f/DQr4= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.13 h1:JRaIgADQS/U6uXDqlPiefP32yXTda7Kqfx+LgspooZM= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.13/go.mod h1:CEuVn5WqOMilYl+tbccq8+N2ieCy0gVn3OtRb0vBNNM= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.21 h1:c31//R3xgIJMSC8S6hEVq+38DcvUlgFY0FM6mSI5oto= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.21/go.mod h1:r6+pf23ouCB718FUxaqzZdbpYFyDtehyZcmP5KL9FkA= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.14.3 h1:bON1rJf67TSTDCKg816AAIE4xSTtoo9tl0XRkO72R+I= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.14.3/go.mod h1:c5BBpjJcQXpfeq9iASyVKA3T6vX6B6LEXY4mL/gklDY= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.21 h1:ZlvrNcHSFFWURB8avufQq9gFsheUgjVD9536obIknfM= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.21/go.mod h1:cv3TNhVrssKR0O/xxLJVRfd2oazSnZnkUeTf6ctUwfQ= github.com/aws/aws-sdk-go-v2/service/s3 v1.98.0 h1:foqo/ocQ7WqKwy3FojGtZQJo0FR4vto9qnz9VaumbCo= github.com/aws/aws-sdk-go-v2/service/s3 v1.98.0/go.mod h1:uoA43SdFwacedBfSgfFSjjCvYe8aYBS7EnU5GZ/YKMM= -github.com/aws/aws-sdk-go-v2/service/signin v1.0.9 h1:QKZH0S178gCmFEgst8hN0mCX1KxLgHBKKY/CLqwP8lg= -github.com/aws/aws-sdk-go-v2/service/signin v1.0.9/go.mod h1:7yuQJoT+OoH8aqIxw9vwF+8KpvLZ8AWmvmUWHsGQZvI= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.14 h1:GcLE9ba5ehAQma6wlopUesYg/hbcOhFNWTjELkiWkh4= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.14/go.mod h1:WSvS1NLr7JaPunCXqpJnWk1Bjo7IxzZXrZi1QQCkuqM= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.18 h1:mP49nTpfKtpXLt5SLn8Uv8z6W+03jYVoOSAl/c02nog= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.18/go.mod h1:YO8TrYtFdl5w/4vmjL8zaBSsiNp3w0L1FfKVKenZT7w= -github.com/aws/aws-sdk-go-v2/service/sts v1.41.10 h1:p8ogvvLugcR/zLBXTXrTkj0RYBUdErbMnAFFp12Lm/U= -github.com/aws/aws-sdk-go-v2/service/sts v1.41.10/go.mod h1:60dv0eZJfeVXfbT1tFJinbHrDfSJ2GZl4Q//OSSNAVw= -github.com/aws/smithy-go v1.24.2 h1:FzA3bu/nt/vDvmnkg+R8Xl46gmzEDam6mZ1hzmwXFng= -github.com/aws/smithy-go v1.24.2/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= +github.com/aws/aws-sdk-go-v2/service/signin v1.10.0 h1:ZD5qFpWcaOKdTuhBi431pIDkCgrMkMlMT6jlpSPoIRI= +github.com/aws/aws-sdk-go-v2/service/signin v1.10.0/go.mod h1:8Nuuf+tR346PjJ3MvZPh9pekbLiLQFWJhzMXfwy7alA= +github.com/aws/aws-sdk-go-v2/service/sso v1.38.0 h1:JGeeBcMlhg1xtOXYpeCaTQBZObtXMPQCUqBcmr65NRA= +github.com/aws/aws-sdk-go-v2/service/sso v1.38.0/go.mod h1:XwteswG9EOMRFm73UT0t+MbTwyLxMrEXkU6e+v92Lzo= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.43.0 h1:obhahQXDEdVEv8y5bTKXR30LVaxYe1kyYM0L7l2Iq+k= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.43.0/go.mod h1:6twZZ/aXHNy1vXUO8koUbp++MYzMASkOgEBdkbJYmO0= +github.com/aws/aws-sdk-go-v2/service/sts v1.51.0 h1:Zpnqa6XtrNzXZnwbdCqHOXpXhMsa01ql/pcRQ1sb4hk= +github.com/aws/aws-sdk-go-v2/service/sts v1.51.0/go.mod h1:/8JRcdTt//hG0Q4BTmGbuOplT7ABe+5rdtqUHqXvYIM= +github.com/aws/smithy-go v1.28.1 h1:R/nXH00c8qcfCzQVELtRw+eLQWtzv+VAIEFJ1/xxXlQ= +github.com/aws/smithy-go v1.28.1/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc h1:biVzkmvwrH8WK8raXaxBx6fRVTlJILwEwQGL1I/ByEI= @@ -108,7 +104,6 @@ github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE= github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk= -github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= @@ -141,8 +136,8 @@ github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2 github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/go-chi/chi/v5 v5.3.0 h1:halUjDxhshgXHMrao5bB8eNBXo/rnzwr8m5m36glehM= github.com/go-chi/chi/v5 v5.3.0/go.mod h1:R+tYY2hNuVUUjxoPtqUdgBqevM9s9njzkTLutVsOCto= -github.com/go-chi/cors v1.2.1 h1:xEC8UT3Rlp2QuWNEr4Fs/c2EAGVKBwy/1vHx3bppil4= -github.com/go-chi/cors v1.2.1/go.mod h1:sSbTewc+6wYHBBCW7ytsFSn836hqM7JxpglAy2Vzc58= +github.com/go-chi/cors v1.2.2 h1:Jmey33TE+b+rB7fT8MUy1u0I4L+NARQlK6LhzKPSyQE= +github.com/go-chi/cors v1.2.2/go.mod h1:sSbTewc+6wYHBBCW7ytsFSn836hqM7JxpglAy2Vzc58= github.com/go-chi/httprate v0.16.0 h1:8V5DH9j6pSK6UQoBsTpvMyFxycqaKEIToyPKzHJjUa8= github.com/go-chi/httprate v0.16.0/go.mod h1:A8lo+qRhk+s9LiuP5saS7XCGDXRXMcrueq0NfIuCa/I= github.com/go-jose/go-jose/v4 v4.1.4 h1:moDMcTHmvE6Groj34emNPLs/qtYXRVcd6S7NHbHz3kA= @@ -152,7 +147,6 @@ github.com/go-logr/logr v1.4.4 h1:tG4xh9yMsRCAiodLVTxyrkzSZ9+o0L1Kg/+cPVcbP/8= github.com/go-logr/logr v1.4.4/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= @@ -208,11 +202,10 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0 github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= -github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= -github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= +github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= @@ -239,16 +232,14 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pquerna/otp v1.5.0 h1:NMMR+WrmaqXU4EzdGJEE1aUUI0AMRzsp96fFFWNPwxs= github.com/pquerna/otp v1.5.0/go.mod h1:dkJfzwRKNiegxyNb54X/3fLwhCynbMspSyWKnvi1AEg= github.com/prometheus/client_golang v1.24.1 h1:JnJkREXzWxUdCuPFpIWZiPispT9xVV59uiuyR2bPlnU= github.com/prometheus/client_golang v1.24.1/go.mod h1:F+oSRECHg4sse5ucfYpYDeIv/hu68Zo0uoHKetWnzcE= github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= -github.com/prometheus/common v0.70.1 h1:1HvjP4D5oL3t8RsPlwxA9onvvStjtIHYE5XuuwOi/PY= -github.com/prometheus/common v0.70.1/go.mod h1:VdFUQDMZK3VLkurFUVhia6uys/0suUp86TJz5qbJRhc= +github.com/prometheus/common v0.71.0 h1:9KDAKb7Mj3HEVKyFCK6Dc/HIwlBzZIN2l7/lrHl3KK8= +github.com/prometheus/common v0.71.0/go.mod h1:CLJ5H8TEsGX8bl31BdMkfhIZ+QmZ9tBPPotUxUbfcmk= github.com/prometheus/procfs v0.21.1 h1:GljZCt+zSTS+NZq88cyQ1LjZ+RCHp3uVuabBWA5+OJI= github.com/prometheus/procfs v0.21.1/go.mod h1:aB55Cww9pdSJVHk0hUf0inxWyyjPogFIjmHKYgMKmtY= github.com/redis/go-redis/v9 v9.18.0 h1:pMkxYPkEbMPwRdenAzUNyFNrDgHx9U+DrBabWNfSRQs= @@ -257,9 +248,8 @@ github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= -github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.32.0 h1:keLypqrlIjaFsbmJOBdB/qvyF8KEtCWHwobLp5l/mQ0= -github.com/rs/zerolog v1.32.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= +github.com/rs/zerolog v1.35.1 h1:m7xQeoiLIiV0BCEY4Hs+j2NG4Gp2o2KPKmhnnLiazKI= +github.com/rs/zerolog v1.35.1/go.mod h1:EjML9kdfa/RMA7h/6z6pYmq1ykOuA8/mjWaEvGI+jcw= github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0= github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M= github.com/sony/gobreaker v0.5.0 h1:dRCvqm0P490vZPmy7ppEk2qCnCieBooFJ+YoXGYB+yg= @@ -271,10 +261,8 @@ github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= -github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -github.com/teslamotors/fleet-telemetry v0.9.0 h1:3qz6JAaMF15+HdUzq5eH+LPelH6qiUf+6x5pHG9uzbg= -github.com/teslamotors/fleet-telemetry v0.9.0/go.mod h1:0pr+vwxzHPxJjB2LNhwCuG+FvIgpoM70GICHJB3MMlk= +github.com/stretchr/testify v1.12.1 h1:EuwCh5fleGS7H32xRwO3wRGT7DxrDhLAT6FF8MpWDWE= +github.com/stretchr/testify v1.12.1/go.mod h1:MDEgiDPPsNp5cuIrHPPCyornHKgEVbtFUmoNlxoYthg= github.com/teslamotors/fleet-telemetry v0.9.5-0.20260924184623-3d366a3da23c h1:Qgt7TjYmL2r1S0HUiCA17LI1q3Otvdz044qbmjawBgc= github.com/teslamotors/fleet-telemetry v0.9.5-0.20260924184623-3d366a3da23c/go.mod h1:J/JIH6HU3llBEstJAPjMaaCyxAPtWEXyxiYlgp43eiE= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= @@ -328,6 +316,8 @@ go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.yaml.in/yaml/v2 v2.4.4 h1:tuyd0P+2Ont/d6e2rl3be67goVK4R6deVxCUX5vyPaQ= go.yaml.in/yaml/v2 v2.4.4/go.mod h1:gMZqIpDtDqOfM0uNfy0SkpRhvUryYH0Z6wdMYcacYXQ= +go.yaml.in/yaml/v3 v3.0.5 h1:N6y/pJk8buWs9NY5ERU2HSMfm+IuD/OtfdAnq6kESPw= +go.yaml.in/yaml/v3 v3.0.5/go.mod h1:HVTZu1O7/Vkt2N+BFy8Zza+lnLsABggaTM2ZpNIGuKg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= @@ -362,14 +352,13 @@ golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek= -golang.org/x/sync v0.22.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sync v0.23.0 h1:KameEIfc1IkluZyXWLn39Wd4tURc6GbCiISGiZm2bQk= +golang.org/x/sync v0.23.0/go.mod h1:sUUOizhqBxiL6pEWpqNLUiaJn1ShEbZ6BBqskPbjZm0= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/web/e2e/tesla-usage.smoke.spec.ts b/web/e2e/tesla-usage.smoke.spec.ts index 3e7c5405cb..e7fc8762e3 100644 --- a/web/e2e/tesla-usage.smoke.spec.ts +++ b/web/e2e/tesla-usage.smoke.spec.ts @@ -83,7 +83,7 @@ test('Tesla usage page and status overview render desktop/mobile, light/dark and await page.getByRole('button', { name: 'Date range' }).click() await expect(page.getByRole('option', { name: 'Last year' })).toBeVisible() await expect(page.locator('.rdp-month').first()).toBeVisible() - await expect(page.getByRole('dialog', { name: 'Date range picker' }).getByRole('gridcell', { name: '20' }).first()).toBeVisible() + await expect(page.getByRole('dialog', { name: 'Date range picker' }).locator('.rdp-day_button').first()).toBeVisible() const applyButton = page.getByRole('dialog', { name: 'Date range picker' }).getByRole('button', { name: 'Apply' }) await expect.poll(async () => { const bounds = await applyButton.boundingBox() @@ -140,9 +140,11 @@ test('custom calendar dates submit inclusive UTC days as an exclusive-end API qu const picker = page.getByRole('dialog', { name: 'Date range picker' }) await picker.getByRole('button', { name: 'New range' }).click() const september = picker.getByRole('grid', { name: 'September' }) - await expect(september.getByRole('gridcell', { name: '20' })).toBeVisible() - await september.getByRole('gridcell', { name: '20' }).click() - await september.getByRole('gridcell', { name: '21' }).click() + const day20 = september.locator('[data-day="2026-09-20"] button') + const day21 = september.locator('[data-day="2026-09-21"] button') + await expect(day20).toBeVisible() + await day20.click() + await day21.click() await picker.getByRole('button', { name: 'Apply' }).click() await expect.poll(() => historyRange).toEqual({ start: '2026-09-20T00:00:00.000Z', end: '2026-09-22T00:00:00.000Z', diff --git a/web/package-lock.json b/web/package-lock.json index 4f47e9a1e1..caddf032d2 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -19,7 +19,7 @@ "@opentelemetry/sdk-trace-web": "^2.8.0", "@tanstack/react-query": "^5.101.4", "@tanstack/react-virtual": "^3.13.24", - "date-fns": "^3.6.0", + "date-fns": "^4.4.0", "framer-motion": "^12.38.0", "html2canvas-pro": "^2.0.2", "i18next": "^25.10.4", @@ -29,7 +29,7 @@ "leaflet.markercluster": "^1.5.3", "lucide-react": "^0.363.0", "react": "^18.3.1", - "react-day-picker": "^8.10.2", + "react-day-picker": "^9.14.0", "react-dom": "^18.3.1", "react-grid-layout": "^2.2.3", "react-hook-form": "^7.74.0", @@ -1973,6 +1973,12 @@ "node": ">=20.19.0" } }, + "node_modules/@date-fns/tz": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@date-fns/tz/-/tz-1.5.0.tgz", + "integrity": "sha512-lwYN/vDPeNRULcepoE/LO2Pgx+7/RV+S9ARfbc9lr2DtGkOD7pAiruHvbR1RX3Qyf6ja47EWJDMsNK5vK08DJg==", + "license": "MIT" + }, "node_modules/@dnd-kit/accessibility": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@dnd-kit/accessibility/-/accessibility-3.1.1.tgz", @@ -4217,6 +4223,15 @@ "dev": true, "license": "MIT" }, + "node_modules/@tabby_ai/hijri-converter": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@tabby_ai/hijri-converter/-/hijri-converter-1.0.5.tgz", + "integrity": "sha512-r5bClKrcIusDoo049dSL8CawnHR6mRdDwhlQuIgZRNty68q0x8k3Lf1BtPAMxRf/GgnHBnIO4ujd3+GQdLWzxQ==", + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/@tailwindcss/container-queries": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@tailwindcss/container-queries/-/container-queries-0.1.1.tgz", @@ -4610,14 +4625,12 @@ "version": "15.7.15", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", - "dev": true, "license": "MIT" }, "node_modules/@types/react": { "version": "18.3.31", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.31.tgz", "integrity": "sha512-vfEqpXTvwT91yhmwdfouStN2hSKwTvyRs8qpLfADyrq/kxDw0hZM7Wk9Ug1FELj8hIby+S/+kQCSRFF32nv2Qw==", - "dev": true, "license": "MIT", "dependencies": { "@types/prop-types": "*", @@ -6210,15 +6223,21 @@ } }, "node_modules/date-fns": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", - "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.4.0.tgz", + "integrity": "sha512-+1UMbeh68lH1SegH83CGWwpb6OHHbpSgr3+s5Eww5M4CAgswBpoWS0AjTOfEJ33HiYKz1hdj/KTFprzXHmq/6w==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/kossnocorp" } }, + "node_modules/date-fns-jalali": { + "version": "4.1.0-0", + "resolved": "https://registry.npmjs.org/date-fns-jalali/-/date-fns-jalali-4.1.0-0.tgz", + "integrity": "sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg==", + "license": "MIT" + }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -10742,17 +10761,25 @@ } }, "node_modules/react-day-picker": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-8.10.2.tgz", - "integrity": "sha512-LK68OTbHB3oJNhl9cA0qVizzp3o26w61YSjAFkYi67N86iro32wx86kSNeFU/hq+gI8m1yzWhnomMLfZ041RzQ==", + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-9.14.0.tgz", + "integrity": "sha512-tBaoDWjPwe0M5pGrum4H0SR6Lyk+BO9oHnp9JbKpGKW2mlraNPgP9BMfsg5pWpwrssARmeqk7YBl2oXutZTaHA==", "license": "MIT", + "dependencies": { + "@date-fns/tz": "^1.4.1", + "@tabby_ai/hijri-converter": "1.0.5", + "date-fns": "^4.1.0", + "date-fns-jalali": "4.1.0-0" + }, + "engines": { + "node": ">=18" + }, "funding": { "type": "individual", "url": "https://github.com/sponsors/gpbl" }, "peerDependencies": { - "date-fns": "^2.28.0 || ^3.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + "react": ">=16.8.0" } }, "node_modules/react-dom": { @@ -12493,7 +12520,7 @@ "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", diff --git a/web/package.json b/web/package.json index 50d3cd19f8..919ce90af7 100644 --- a/web/package.json +++ b/web/package.json @@ -112,7 +112,7 @@ "@opentelemetry/sdk-trace-web": "^2.8.0", "@tanstack/react-query": "^5.101.4", "@tanstack/react-virtual": "^3.13.24", - "date-fns": "^3.6.0", + "date-fns": "^4.4.0", "framer-motion": "^12.38.0", "html2canvas-pro": "^2.0.2", "i18next": "^25.10.4", @@ -122,7 +122,7 @@ "leaflet.markercluster": "^1.5.3", "lucide-react": "^0.363.0", "react": "^18.3.1", - "react-day-picker": "^8.10.2", + "react-day-picker": "^9.14.0", "react-dom": "^18.3.1", "react-grid-layout": "^2.2.3", "react-hook-form": "^7.74.0", diff --git a/web/src/components/forms/RangePicker.tsx b/web/src/components/forms/RangePicker.tsx index a528a14617..30d8165637 100644 --- a/web/src/components/forms/RangePicker.tsx +++ b/web/src/components/forms/RangePicker.tsx @@ -307,8 +307,11 @@ export function RangePicker({ selected={staged} onSelect={setStaged} numberOfMonths={typeof window !== 'undefined' && window.innerWidth >= 768 ? 2 : 1} - fromDate={minDateObj} - toDate={maxDateObj} + startMonth={minDateObj} + endMonth={maxDateObj} + disabled={minDateObj + ? [{ before: minDateObj }, { after: maxDateObj }] + : { after: maxDateObj }} showOutsideDays={false} className="rdp-tesla" weekStartsOn={(i18n.language?.startsWith('en') ? 0 : 1) as 0 | 1} diff --git a/web/src/components/forms/__tests__/RangePicker.test.tsx b/web/src/components/forms/__tests__/RangePicker.test.tsx index addcccc0a3..77e323e5f1 100644 --- a/web/src/components/forms/__tests__/RangePicker.test.tsx +++ b/web/src/components/forms/__tests__/RangePicker.test.tsx @@ -110,6 +110,27 @@ describe(' preset behavior — auto-apply, no Apply needed', () = }); describe(' Apply button', () => { + it('keeps dates outside the configured bounds unselectable', async () => { + render( + , + ); + fireEvent.click(screen.getByRole('button', { name: /date range/i })); + expect( + await screen.findByRole( + 'button', + { name: /Thursday, January 2nd, 2025/i }, + { timeout: 20_000 }, + ), + ).toBeDisabled(); + expect(screen.getByRole('button', { name: /Saturday, January 4th, 2025/i })).toBeEnabled(); + expect(screen.getByRole('button', { name: /Wednesday, January 8th, 2025/i })).toBeDisabled(); + }); + it('Apply is disabled when staged range matches the current value', () => { render(); fireEvent.click(screen.getByRole('button', { name: /date range/i })); diff --git a/web/src/index.css b/web/src/index.css index 94fc0340ed..c28f77d7cd 100644 --- a/web/src/index.css +++ b/web/src/index.css @@ -1818,35 +1818,32 @@ figure[data-print-card]:fullscreen p { /* react-day-picker theming for the RangePicker popover. Keeps the calendar consistent with the dark glass surface tokens. */ .rdp-tesla { - --rdp-cell-size: 36px; + --rdp-day-height: 36px; + --rdp-day-width: 36px; + --rdp-day_button-height: 34px; + --rdp-day_button-width: 34px; --rdp-accent-color: var(--accent, #2563eb); - --rdp-background-color: rgba(255, 255, 255, 0.06); - --rdp-accent-color-dark: var(--accent, #2563eb); - --rdp-background-color-dark: rgba(255, 255, 255, 0.08); - --rdp-outline: 2px solid var(--accent, #2563eb); - --rdp-outline-selected: 2px solid var(--accent, #2563eb); + --rdp-accent-background-color: rgba(37, 99, 235, 0.18); margin: 0; color: var(--text-primary); } -.rdp-tesla .rdp-day_today:not(.rdp-day_selected) { +.rdp-tesla .rdp-today:not(.rdp-selected) { font-weight: 700; color: var(--accent, #2563eb); } -.rdp-tesla .rdp-day_selected, -.rdp-tesla .rdp-day_selected:focus-visible, -.rdp-tesla .rdp-day_selected:hover { +.rdp-tesla .rdp-selected .rdp-day_button { background-color: var(--accent, #2563eb); color: white; } -.rdp-tesla .rdp-day_range_middle { - background-color: rgba(37, 99, 235, 0.18); +.rdp-tesla .rdp-range_middle .rdp-day_button { + background-color: var(--rdp-accent-background-color); color: var(--text-primary); } -.rdp-tesla .rdp-button:focus-visible { +.rdp-tesla .rdp-day_button:focus-visible { outline: 2px solid var(--accent, #2563eb); outline-offset: 2px; } -.rdp-tesla .rdp-head_cell { +.rdp-tesla .rdp-weekday { color: var(--text-muted); font-weight: 500; } @@ -1854,10 +1851,12 @@ figure[data-print-card]:fullscreen p { color: var(--text-primary); font-weight: 600; } -.rdp-tesla .rdp-nav_button { +.rdp-tesla .rdp-button_previous, +.rdp-tesla .rdp-button_next { color: var(--text-secondary); } -.rdp-tesla .rdp-nav_button:hover { +.rdp-tesla .rdp-button_previous:hover, +.rdp-tesla .rdp-button_next:hover { background-color: rgba(255, 255, 255, 0.06); }