Skip to content

Deduplicate pipeline dependency installation tasks - #28232

Open
Alex Villarreal (alexvy86) wants to merge 2 commits into
microsoft:mainfrom
alexvy86:pipeline-deduplication
Open

Alex Villarreal (alexvy86) wants to merge 2 commits into
microsoft:mainfrom
alexvy86:pipeline-deduplication

Conversation

@alexvy86

@alexvy86 Alex Villarreal (alexvy86) commented Sep 15, 2026

Copy link
Copy Markdown
Contributor

[AlejandroBot 8c2a]

Description

Consolidate Azure Pipelines dependency installation on include-install.yml so installs consistently use frozen lockfiles, retry failures, and identify the working directory in task names and logs.

Add a root-only install option, migrate the remaining inline dependency installs, and keep build/link operations separate from retried installation. Preserve pnpm setup, authentication and cache ordering, and conditional installation behavior. Update pipeline path filters and document the shared template.

Also fix a pre-existing path-filter gap, not a regression introduced by this refactor: the explicit CI/PR filters of 12 consuming pipelines omitted include-install-build-tools.yml. Azure Pipelines does not follow template dependencies when evaluating path filters, so changes limited to that file would not trigger those consumers. Add the installer to both filters in each pipeline. GitSSH remains unchanged because it disables package installation and version-setting.

The telemetry install now explicitly targets the ff_pipeline_host checkout and uses --frozen-lockfile. Keep the Bash inline because some consuming jobs do not check out FluidFramework.

Addresses AB#53289.

Reviewer Guidance

The review process is outlined in the pull request guidelines.

Please focus on root-only versus full-workspace selection, Docker installation conditions, and multi-repository setup ordering. The policy-check template replaces its free-form install command with the root-only option.

Local YAML parsing and template-parameter checks passed. The path-filter follow-up was checked to contain exactly 24 filter additions across 12 pipelines with no other semantic changes. No workspace packages changed. Representative ADO validation remains incomplete, particularly telemetry and pipelines without PR triggers.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI lite review requested due to automatic review settings September 15, 2026 21:54
@github-actions github-actions Bot added area: tools area: build Build related issues area: repo Repo related work area: website base: main PRs targeted against main branch labels Sep 15, 2026
@github-actions

github-actions Bot commented Sep 15, 2026

Copy link
Copy Markdown
Contributor

Hi! Thank you for opening this PR. Want me to review it?

Based on the diff (219 lines, 25 files), I've queued these reviewers:

  • Correctness — logic errors, race conditions, lifecycle issues
  • Security — vulnerabilities, secret exposure, injection
  • API Compatibility — breaking changes, release tags, type design
  • Performance — algorithmic regressions, memory leaks
  • Testing — coverage gaps, hollow tests

How this works

  • Adjust the reviewer set by ticking/unticking boxes above. Reviewer toggles alone don't trigger anything.

  • Tick Start review below to dispatch the review fleet.

  • After review finishes, tick Start review again to request another run — it auto-resets after each dispatch.

  • This comment updates as new commits land; your reviewer selections are preserved.

  • Start review

@github-actions

github-actions Bot commented Sep 15, 2026

Copy link
Copy Markdown
Contributor

Fleet Review — Clean

No issues found across the reviewer fleet for this run.

View run

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The build-tools installation template is not included in the explicit path filters for its consumers.

Pull request overview

This pull request centralizes Azure Pipelines dependency installation with frozen lockfiles, retries, root-only support, and clearer logging.

Changes:

  • Migrates inline installs to include-install.yml.
  • Preserves setup ordering and separates installation from build/link operations.
  • Updates path filters and documents shared template usage.
  • Adds the build-tools template to its consumers’ path filters.
File summaries
File Summary
tools/pipelines/templates/upload-telemetry/include-stage-upload-telemetry.yml Uses shared installation for the ff_pipeline_host checkout.
tools/pipelines/templates/include-test-real-service.yml Migrates multi-repository dependency installation.
tools/pipelines/templates/include-policy-check.yml Uses root-only shared installation.
tools/pipelines/templates/include-install.yml Adds shared frozen-lockfile installation with retries and options.
tools/pipelines/templates/include-install-build-tools.yml Separates installation from build/link operations.
tools/pipelines/templates/build-npm-package.yml Configures full-workspace installation.
tools/pipelines/templates/build-npm-client-package.yml Configures full-workspace installation.
tools/pipelines/templates/build-docker-service.yml Uses shared conditional installation.
tools/pipelines/server-routerlicious.yml Updates pipeline installation usage and path filters.
tools/pipelines/server-historian.yml Updates pipeline installation usage and path filters.
tools/pipelines/server-gitssh.yml Updates pipeline installation usage and path filters.
tools/pipelines/server-gitrest.yml Updates pipeline installation usage and path filters.
tools/pipelines/repo-policy-check.yml Updates root-only installation configuration and filters.
tools/pipelines/README.md Documents shared installation template usage.
tools/pipelines/docs-lint.yml Updates installation usage and path filters.
tools/pipelines/build-test-tools.yml Updates installation usage and path filters.
tools/pipelines/build-protocol-definitions.yml Updates installation usage and path filters.
tools/pipelines/build-performance-observability.yml Updates installation usage and path filters.
tools/pipelines/build-eslint-config-fluid.yml Updates installation usage and path filters.
tools/pipelines/build-common-utils.yml Updates installation usage and path filters.
tools/pipelines/build-client.yml Updates installation usage and path filters.
tools/pipelines/build-build-tools.yml Updates installation usage and path filters.
tools/pipelines/build-build-common.yml Updates installation usage and path filters.
tools/pipelines/build-benchmark-tool.yml Updates installation usage and path filters.
tools/pipelines/build-api-markdown-documenter.yml Updates installation usage and path filters.
Review details

Suppressed comments (1)

tools/pipelines/templates/include-install-build-tools.yml:49

  • This shared template is now changed to perform the dependency install, but none of the explicit CI/PR path filters for its consumers include tools/pipelines/templates/include-install-build-tools.yml (the callers are reached through include-set-package-version.yml/the npm build templates). A future change limited to this template therefore will not trigger those pipelines; add this template to the corresponding filters, or otherwise make the dependency part of the filter set.
    - template: /tools/pipelines/templates/include-install.yml@self
      parameters:
        buildDirectory: $(FluidFrameworkDirectory)/build-tools
        installPnpm: false
  • Files reviewed: 25/25 changed files
  • Comments generated: 0
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Fix the existing gap where installer-only changes did not trigger its consumers.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The broad pipeline-template refactor still requires representative Azure Pipelines validation, especially for telemetry and non-PR-triggered consumers.

Review details
  • Files reviewed: 25/25 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

@github-actions

Copy link
Copy Markdown
Contributor

🔗 No broken links found! ✅

Your attention to detail is admirable.

linkcheck output

$ start-server-and-test "npm run serve -- --host 127.0.0.1 --no-open" http://127.0.0.1:3000 check-links
1: starting server using command "npm run serve -- --host 127.0.0.1 --no-open"
and when url "[ 'http://127.0.0.1:3000' ]" is responding with HTTP status code 200
running tests using command "npm run check-links"


> fluid-framework-website@0.0.0 serve
> docusaurus serve --host 127.0.0.1 --no-open

[SUCCESS] Serving "build" directory at: http://127.0.0.1:3000/

> fluid-framework-website@0.0.0 check-links
> linkcheck http://127.0.0.1:3000 --skip-file skipped-urls.txt

Crawling...

Stats:
  658102 links
    3579 destination URLs
    3898 URLs ignored
       0 warnings
       0 errors


@github-actions

Copy link
Copy Markdown
Contributor

Bundle size comparison

Base commit: c3c5bf0ecd313362e83fe8a02b7d39e7e0736960
Head commit: 7e1e29fc820e51411a3df6d06334ec2e5e8573f3

Notable changes

No bundles changed by ≥ 500 bytes parsed.

Per-bundle deltas

@fluid-example/bundle-size-tests

  • fluidFrameworkAllAlpha.js: parsed 805447 → 805503 (+56), gzip 221236 → 221313 (+77)
  • azureClient.js: parsed 634336 → 634331 (-5), gzip 169987 → 170073 (+86)
  • odspClient.js: parsed 606600 → 606711 (+111), gzip 163051 → 163197 (+146)
  • aqueduct.js: parsed 538211 → 538222 (+11), gzip 144462 → 144510 (+48)
  • fluidFramework.js: parsed 415378 → 415411 (+33), gzip 117809 → 117844 (+35)
  • sharedTree.js: parsed 404757 → 404783 (+26), gzip 115252 → 115270 (+18)
  • containerRuntime.js: parsed 315027 → 315009 (-18), gzip 86438 → 86439 (+1)
  • sharedString.js: parsed 175191 → 175198 (+7), gzip 49636 → 49643 (+7)
  • experimentalSharedTree.js: parsed 161846 → 161846 (0), gzip 46722 → 46722 (0)
  • matrix.js: parsed 153720 → 153727 (+7), gzip 44381 → 44388 (+7)
  • loader.js: parsed 147328 → 147344 (+16), gzip 40038 → 40048 (+10)
  • odspDriver.js: parsed 106695 → 106753 (+58), gzip 33226 → 33293 (+67)
  • directory.js: parsed 65669 → 65676 (+7), gzip 18493 → 18501 (+8)
  • 578.js: parsed 58686 → 58686 (0), gzip 17657 → 17657 (0)
  • odspPrefetchSnapshot.js: parsed 46463 → 46444 (-19), gzip 15511 → 15522 (+11)
  • map.js: parsed 45820 → 45827 (+7), gzip 14119 → 14126 (+7)
  • 252.js: parsed 44384 → 44384 (0), gzip 13741 → 13741 (0)
  • summarizerDelayLoadedModule.js: parsed 31287 → 31287 (0), gzip 7929 → 7929 (0)
  • socketModule.js: parsed 27108 → 27078 (-30), gzip 8067 → 8103 (+36)
  • createNewModule.js: parsed 12464 → 12464 (0), gzip 4792 → 4805 (+13)
  • summaryModule.js: parsed 3888 → 3888 (0), gzip 1874 → 1874 (0)
  • connectionState.js: parsed 909 → 909 (0), gzip 500 → 500 (0)
  • sharedTreeAttributes.js: parsed 845 → 852 (+7), gzip 496 → 506 (+10)
  • debugAssert.js: parsed 429 → 429 (0), gzip 299 → 299 (0)
  • FluidFramework-HashFallback.js: parsed 419 → 419 (0), gzip 313 → 313 (0)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: build Build related issues area: repo Repo related work area: tools area: website base: main PRs targeted against main branch deep-review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants