Create re-useable Functional Tests workflow#1932
Merged
mjcheetham merged 3 commits intomasterfrom Apr 1, 2026
Merged
Conversation
tyrielv
approved these changes
Mar 31, 2026
Split the combined install.bat into separate Git and GVFS installers to allow callers to provide their own Git build independently. - Move microsoft/git download from build to validate job (runs once) - Generate a Git-only install.bat inline for the MicrosoftGit artifact - Simplify GVFS install.bat to only install SetupGVFS (no Git) - Rename installer artifact from Installers to GVFS - Download Git (git\), GVFS (gvfs\), and FTs (ft\) separately - Upload logs from both git\logs and gvfs\logs
Lift-and-shift the functional_test and ft_results jobs from build.yaml into a new functional-tests.yaml reusable workflow (workflow_call). build.yaml now calls the reusable workflow, passing only the skip input. No parameterisation yet - artifact names and download sources are hardcoded to match the current same-repo behaviour.
Add inputs to allow microsoft/git (or other callers) to provide their own Git build and download VFSForGit artifacts cross-repo: - vfs_run_id: paired run ID for GVFS installer + FT executables - git_repository/git_run_id/git_artifact_name: Git installer source - output_prefix: namespace uploaded artifacts (e.g. 'VFSForGit') - vfs_token/git_token: secrets for cross-repo artifact downloads Add env vars ARTIFACT_PREFIX and FT_MATRIX_NAME to simplify artifact naming expressions. Add continue-on-error to diagnostic steps. Signed-off-by: Matthew John Cheetham <mjcheetham@outlook.com>
dscho
approved these changes
Apr 1, 2026
mjcheetham
added a commit
to microsoft/git
that referenced
this pull request
Apr 2, 2026
## TL;DR Add a new `vfs-functional-tests.yml` workflow that builds Git from this repository and runs the VFS for Git functional tests against it, using VFSForGit's reusable workflow. ## Why? VFS for Git functional tests currently only run in the VFSForGit repository, against a tagged microsoft/git release. This means VFS-related regressions in Git are only caught *after* a release is tagged. By running the FTs here on every push and PR to `vfs-*` branches, we can catch regressions before they ship. This is the counterpart to microsoft/VFSForGit#1932, which extracted the functional tests into a reusable `workflow_call` workflow. ## How it works 1. **Build Git** — checks out this repo, builds with the Git for Windows SDK, and packages the result into a `MicrosoftGit` artifact with an `install.bat` that deploys via robocopy to `C:\Program Files\Git`. Both ARM64 and x64 are built and combined into a single artifact for the FTs to install and use. 2. **Find VFSForGit build** — locates the latest successful VFSForGit CI run on `master` to get the GVFS installer and FT executables. If the build was a 'skipped' build (because an existing run succeeded with that tree) then follow the annotation to the real run. 3. **Call reusable workflow** — invokes `microsoft/VFSForGit/.github/workflows/functional-tests.yaml@master`, which handles the full test matrix (2 configs × 2 architectures × 10 slices)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
TL;DR
Extract the functional tests job from
build.yamlinto a reusablefunctional-tests.yamlworkflow (workflow_call), so that other repositories — specificallymicrosoft/git— can run VFS for Git functional tests against their own Git builds.Why?
Currently, our CI builds
microsoft/gitfrom a release tag and runs functional tests in a single monolithic workflow. Themicrosoft/gitproject wants to run VFS for Git functional tests as part of their CI, using their own freshly-built Git rather than a tagged release. By making the FT workflow reusable,microsoft/gitcan call it with their own Git artifact while we continue to use it exactly as before.This will make it easier for changes in
microsoft/gitto be vetted for VFS for Git compatibility before it gets to a release.What changed?
The installation flow is split into three independent artifacts — Git installer, GVFS installer, and FT executables — so that callers can provide their own Git build while the GVFS installer and FT executables always come from a VFSForGit run.
This PR is best reviewed commit-by-commit:
Separate Git and GVFS installation
Splits the combined
install.batinto separate Git and GVFS installers. Moves themicrosoft/gitdownload from thebuildjob tovalidate(it only needs to run once, not per-configuration).Introduces three artifacts:
MicrosoftGitGVFS_<config>FunctionalTests_<config>Extract functional tests into reusable workflow
Lift-and-shift of the inline
functional_testandft_resultsjobs intofunctional-tests.yamlas aworkflow_callworkflow. No parameterisation — artifact names and download sources are hardcoded to match existing same-repo behaviour.Parameterise functional tests workflow for cross-repo use
Adds inputs (
vfs_run_id,git_repository,git_run_id,git_artifact_name,output_prefix,skip) and secrets (vfs_token,git_token) to support cross-repo callers. AddsARTIFACT_PREFIXandFT_MATRIX_NAMEenv vars to simplify artifact naming. Addscontinue-on-errorto diagnostic steps.See the corresponding PR in
microsoft/gitthat makes use of this reusable workflow: microsoft/git#874