Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
364 commits
Select commit Hold shift + click to select a range
a1297ba
test-gvfs-prococol, t5799: tests for gvfs-helper
jeffhostetler Oct 25, 2019
c4512c7
fetch: use gvfs-helper prefetch under config
derrickstolee Dec 17, 2019
e0fe67c
release: add Mac OSX installer build
vdye Jul 16, 2021
5c7f6d0
gvfs-helper: move result-list construction into install functions
jeffhostetler Nov 13, 2019
da74952
gvfs-helper: better support for concurrent packfile fetches
jeffhostetler Dec 18, 2019
0256aea
release: build unsigned Ubuntu .deb package
vdye Jul 16, 2021
06ae72f
t5799: add support for POST to return either a loose object or packfile
jeffhostetler Nov 13, 2019
65bcb62
remote-curl: do not call fetch-pack when using gvfs-helper
derrickstolee Feb 3, 2020
7554a9a
t5799: explicitly test gvfs-helper --fallback and --no-fallback
jeffhostetler Jun 28, 2024
d5e0466
release: add signing step for .deb package
vdye Jul 16, 2021
773b79d
t5799: cleanup wc-l and grep-c lines
jeffhostetler Nov 13, 2019
4ac394c
fetch: reprepare packs before checking connectivity
derrickstolee Mar 12, 2020
de0c8d2
gvfs-helper: add --max-retries to prefetch verb
jeffhostetler Apr 12, 2023
f0582ab
gvfs-helper: don't fallback with new config
derrickstolee Jun 27, 2024
139b0fe
release: create draft GitHub release with packages & installers
vdye Jul 16, 2021
73901ea
dist: archive HEAD instead of HEAD^{tree}
vdye Dec 2, 2021
a80c966
gvfs-helper: verify loose objects after write
derrickstolee Sep 18, 2020
3124a19
gvfs-helper: retry when creating temp files
derrickstolee Dec 26, 2019
6027dd2
t5799: add tests to detect corrupt pack/idx files in prefetch
jeffhostetler Apr 13, 2023
b6e2b8a
test-gvfs-protocol: add cache_http_503 to mayhem
jeffhostetler Jun 28, 2024
dbc1f92
Disable the `monitor-components` workflow in msft-git
dscho May 13, 2022
4d09afc
build-git-installers: publish gpg public key
ldennington Oct 24, 2023
5726a9e
release: include GIT_BUILT_FROM_COMMIT in MacOS build
vdye Dec 2, 2021
1b84a7c
t7599: create corrupt blob test
jeffhostetler Sep 18, 2020
23bc195
sparse: avoid warnings about known cURL issues in gvfs-helper.c
derrickstolee Aug 3, 2021
36d7a30
gvfs-helper: ignore .idx files in prefetch multi-part responses
jeffhostetler Apr 13, 2023
7dbb617
t5799: add unit tests for new `gvfs.fallback` config setting
jeffhostetler Jun 28, 2024
e487418
maintenance: care about gvfs.sharedCache config
derrickstolee Dec 15, 2020
8299e93
unpack-trees:virtualfilesystem: Improve efficiency of clear_ce_flags
neerajsi-msft2 Feb 6, 2021
2e6f7ca
.github: enable windows builds on microsoft fork
derrickstolee Mar 8, 2023
ccfe9a8
release: continue pestering until user upgrades
derrickstolee Oct 6, 2021
374658f
release: remove the obsolete GitHub installer workflow
ldennington Aug 17, 2022
9d123db
scalar: implement a minimal JSON parser
dscho Apr 26, 2021
041eda1
scalar clone: support GVFS-enabled remote repositories
dscho Aug 24, 2021
0845a2a
test-gvfs-protocol: also serve smart protocol
dscho Apr 16, 2021
ba78067
gvfs-helper: add the `endpoint` command
dscho Apr 26, 2021
4c3a323
dir_inside_of(): handle directory separators correctly
dscho May 14, 2021
d8cea53
scalar: disable authentication in unattended mode
dscho May 6, 2021
9bf7ec5
scalar: set the config write-lock timeout to 150ms
dscho May 18, 2021
fdc5074
abspath: make strip_last_path_component() global
derrickstolee Oct 4, 2022
4cece70
scalar: set the config write-lock timeout to 150ms
dscho May 18, 2021
91d162e
scalar: do initialize `gvfs.sharedCache`
dscho May 3, 2021
ccd1822
scalar: upgrade the config lock timeout setting automagically
dscho Sep 16, 2026
ac8efd7
scalar diagnose: include shared cache info
dscho Jun 1, 2021
45e6e6e
config: (handle and) warn about deprecated lock timeout setting
dscho Sep 16, 2026
98d8206
scalar: only try GVFS protocol on https:// URLs
dscho Apr 28, 2021
45a0b08
scalar: add docs from microsoft/scalar
derrickstolee Jun 16, 2021
1c972e0
Merge branch 'scalar-gentler-config-locking'
dscho May 19, 2021
745ea26
scalar: verify that we can use a GVFS-enabled repository
dscho Apr 16, 2021
c4cc251
Merge branch 'scalar-extra-docs'
dscho Nov 16, 2021
b8bfc94
scalar: add the `cache-server` command
dscho Apr 23, 2021
40b79c9
scalar (Windows): use forward slashes as directory separators
dscho May 10, 2022
ded06e2
scalar: add a test toggle to skip accessing the vsts/info endpoint
dscho May 12, 2021
a22b2ac
scalar: add retry logic to run_git()
derrickstolee Jun 17, 2021
bc5ee0e
update-microsoft-git: create barebones builtin
derrickstolee Apr 29, 2021
195c94f
.github: reinstate ISSUE_TEMPLATE.md for microsoft/git
derrickstolee Mar 16, 2022
6e6102b
scalar: adjust documentation to the microsoft/git fork
dscho Jan 25, 2022
5a6d8aa
scalar: support the `config` command for backwards compatibility
dscho May 27, 2021
ec28a42
Merge branch 'microsoft/vfs-2.35.0'
dscho Oct 7, 2021
304b867
update-microsoft-git: Windows implementation
derrickstolee Apr 29, 2021
6199e21
.github: update PULL_REQUEST_TEMPLATE.md
derrickstolee Mar 16, 2022
f622b16
scalar: enable untracked cache unconditionally
derrickstolee Jun 21, 2021
03f62ef
Merge branch 'scalar'
dscho Aug 24, 2021
a5f0546
update-microsoft-git: use brew on macOS
derrickstolee Apr 29, 2021
d703e7b
Adjust README.md for microsoft/git
May 4, 2021
3ad5e6b
scalar: parse `clone --no-fetch-commits-and-trees` for backwards comp…
dscho Aug 24, 2021
3f5f933
scalar: make GVFS Protocol a forced choice
derrickstolee May 1, 2024
c1cd1e9
sparse-checkout: add config to disable deleting dirs
derrickstolee Aug 22, 2021
437dd9e
add/rm: allow adding sparse entries when virtual
derrickstolee Jun 29, 2021
185c9b9
scalar: work around GVFS Protocol HTTP/2 failures
Copilot May 22, 2025
d702dee
sparse-index: add ensure_full_index_with_reason()
derrickstolee Sep 30, 2024
b8c4907
diff: ignore sparse paths in diffstat
derrickstolee Jul 26, 2021
9797427
Merge pull request #392: add: allow adding sparse entries when virtual
derrickstolee Jul 1, 2021
3525abe
scalar diagnose: accommodate Scalar's Functional Tests
dscho May 9, 2022
bd1c66e
gvfs-helper-client: clean up server process(es)
derrickstolee May 23, 2025
63a372c
treewide: add reasons for expanding index
derrickstolee Sep 30, 2024
6399fd4
repo-settings: enable sparse index by default
derrickstolee Jun 15, 2021
0e2f15d
Merge pull request #410: Sparse Index: latest integrations
derrickstolee Aug 24, 2021
173fbe8
ci: run Scalar's Functional Tests
dscho Jun 8, 2021
a268f62
Merge branch 'scalar-with-gvfs'
dscho May 3, 2021
1a82f14
treewide: custom reasons for expanding index
derrickstolee Sep 30, 2024
ff97e0d
TO-CHECK: t1092: use quiet mode for rebase tests
derrickstolee Oct 31, 2021
5c5749e
TO-UPSTREAM: sequencer: avoid progress when stderr is redirected
derrickstolee Sep 23, 2021
88a1b03
Merge pull request #414: Make sparse index the default
derrickstolee Aug 26, 2021
78131bd
scalar: upgrade to newest FSMonitor config setting
vdye Apr 5, 2022
a9082e7
Merge branch 'run-scalar-functional-tests'
dscho Nov 16, 2021
5344e5f
sparse-index: add macro for unaudited expansions
derrickstolee Sep 30, 2024
2c2f23b
reset: fix mixed reset when using virtual filesystem
Mar 15, 2017
cc8484e
Merge pull request #432: sequencer: avoid progress when stderr is red…
derrickstolee Sep 23, 2021
57d01e4
diff(sparse-index): verify with partially-sparse
ldennington Sep 10, 2021
9452c72
stash: expand testing for `git stash -u`
vdye Sep 22, 2021
8f91965
Merge branch 'scalar-reconfigure'
dscho Jun 1, 2021
fecc10b
Merge core VFS features
dscho Jun 11, 2018
c51dae1
Merge advanced VFS-specific features
dscho Jun 11, 2018
7f8acfa
Permit `repack` command in Scalar clones (#732)
mjcheetham Mar 31, 2025
6cf5de4
Merge virtualfilesystem hook
dscho Jun 11, 2018
8062144
Merge updates to serialized status
dscho Jun 11, 2018
84e0878
Merge trace2 experimental regions
jeffhostetler Apr 23, 2019
2d9d5eb
Merge first wave of gvfs-helper feature
jeffhostetler Nov 14, 2019
49bcb07
Merge gvfs-helper prefetch feature
derrickstolee Dec 17, 2019
d9073ce
Harden gvfs-helper to validate the packfiles in a multipart prefetch …
jeffhostetler Apr 17, 2023
9a468b7
Docs: update sparse index plan with logging
derrickstolee Sep 30, 2024
778fa0a
gvfs-helper: add gvfs.fallback and unit tests (#665)
dscho Jul 1, 2024
ebccc52
sparse-index: log failure to clear skip-worktree
derrickstolee Sep 30, 2024
bf4a701
Merge pull request #494: reset: fix mixed reset when using virtual fi…
derrickstolee Apr 4, 2022
32a39da
Merge pull request #301: Update 'git maintenance' to match upstream
derrickstolee Dec 15, 2020
3ae6c7a
stash: use -f in checkout-index child process
derrickstolee Sep 30, 2024
80b74c0
Merge pull request #419 from ldennington/sparse-index-diff
ldennington Sep 12, 2021
795ee53
Merge pull request #315: unpack-trees:virtualfilesystem: Improve effi…
derrickstolee Feb 16, 2021
b99e79c
sparse-index: do not copy hashtables during expansion
derrickstolee Sep 27, 2024
37a6fdb
Merge pull request #430 from vdye/sparse-index/clean
vdye Sep 23, 2021
385d68f
Merge branch 'adjust-g4w-workflows'
dscho May 13, 2022
372f7fb
Fix rare segfault in sparse-index (#690)
dscho Oct 9, 2024
932d1c0
Merge pull request #399 from vdye/feature/build-installers
vdye Jul 29, 2021
f604ca7
Merge pull request #472 from vdye/ms/macos-build-options
vdye Dec 6, 2021
e141669
Merge pull request #329: Add `git update-microsoft-git`
derrickstolee Apr 30, 2021
39962f1
TO-UPSTREAM: sub-process: avoid leaking `cmd`
dscho Dec 18, 2024
4a172e0
Merge pull request #333: update microsoft/git README
derrickstolee May 17, 2021
7eb9335
hooks: add custom post-command hook config
derrickstolee Mar 25, 2025
f43dc34
remote-curl: release filter options before re-setting them
dscho Dec 18, 2024
61117e1
Merge pull request #371 from dscho/run-scalar-functional-tests-and-fi…
dscho Jun 9, 2021
350ead2
cat_one_file(): make it easy to see that the `size` variable is initi…
dscho Oct 27, 2022
13df2a1
TO-UPSTREAM: Docs: fix asciidoc failures from short delimiters
derrickstolee Mar 25, 2025
99f1c46
transport: release object filter options
dscho Dec 18, 2024
1ffa65b
Merge branch 'sparse-index-stuff'
dscho Jun 17, 2022
6356600
fsck: avoid using an uninitialized variable
dscho Dec 16, 2022
0ca1364
hooks: make hook logic memory-leak free
derrickstolee Mar 25, 2025
54df6d5
maintenance: add cache-local-objects maintenance task
mjcheetham Jan 14, 2025
7717442
push: don't reuse deltas with path walk
derrickstolee Nov 16, 2024
05caf7d
Merge branch 'leak-fixes'
dscho Dec 18, 2024
ce86290
revision: defensive programming
dscho Dec 16, 2022
e05a1ac
load_revindex_from_disk(): avoid accessing uninitialized data
dscho Dec 16, 2022
3519feb
t0401: test post-command for alias, version, typo
derrickstolee Nov 7, 2025
e928dde
scalar.c: add cache-local-objects task
mjcheetham Jan 23, 2025
83d490e
pack-objects: don't reuse deltas with path walk (#707)
dscho Dec 19, 2024
6e52191
get_parent(): defensive programming
dscho Dec 16, 2022
05ca572
load_pack_mtimes_file(): avoid accessing uninitialized data
dscho Dec 16, 2022
e6ec9ec
hooks: better handle config without gitdir
derrickstolee Nov 7, 2025
44aaf5c
maintenance: add new `cache-local-objects` maintenance task (#720)
mjcheetham Jan 31, 2025
5425810
fetch-pack: defensive programming
dscho Dec 16, 2022
5477bb3
codeql: run static analysis as part of CI builds
dscho Aug 9, 2022
7dca882
unparse_commit(): defensive programming
dscho Dec 16, 2022
c62e391
codeql: publish the sarif file as build artifact
dscho Mar 22, 2023
f090180
verify_commit_graph(): defensive programming
dscho Dec 16, 2022
1496405
codeql: disable a couple of non-critical queries for now
dscho Mar 21, 2025
892800a
stash: defensive programming
dscho Dec 16, 2022
33f0a8f
date: help CodeQL understand that there are no leap-year issues here
dscho Jul 23, 2025
c1f3602
stash: defensive programming
dscho Dec 16, 2022
fe93246
help: help CodeQL understand that consuming envvars is okay here
dscho Jul 23, 2025
bc1b052
push: defensive programming
dscho Dec 16, 2022
8587b48
ctype: help CodeQL understand that `sane_istest()` does not access ar…
dscho Jul 23, 2025
721be97
test-tool repository: check return value of `lookup_commit()`
dscho Dec 16, 2022
370ed28
fetch: defensive programming
dscho Dec 16, 2022
2aa788c
ctype: accommodate for CodeQL misinterpreting the `z` in `mallocz()`
dscho Jul 23, 2025
1ceab82
shallow: handle missing shallow commits gracefully
dscho Dec 16, 2022
51b2566
inherit_tracking(): defensive programming
dscho Dec 16, 2022
29122f7
Merge branch 'uninitialized-variables'
dscho Oct 27, 2022
8ba05a9
strbuf_read: help with CodeQL misunderstanding that `strbuf_read()` d…
dscho Jul 23, 2025
f1c91aa
commit-graph: suppress warning about using a stale stack addresses
dscho Dec 17, 2022
964a8b9
Merge branch 'defensive-programming'
dscho Mar 21, 2025
60150d8
codeql: also check JavaScript code
dscho Jul 24, 2025
7e15654
Merge branch 'codeql-fixes'
dscho Mar 21, 2025
ab3a54d
gvfs-helper: skip collision check for loose objects
derrickstolee Jan 8, 2026
4536990
scalar: add run_git_argv
mjcheetham Dec 17, 2025
5aa2f05
Merge branch 'codeql'
dscho Mar 21, 2025
a4ccd54
hooks: add custom post-command hook config (#736)
dscho Apr 7, 2025
17475dd
gvfs-helper: emit advice on transient errors
derrickstolee Jan 8, 2026
a7dad14
scalar: add --ref-format option to scalar clone
mjcheetham Dec 17, 2025
64b1ed9
Merge branch 'codeql'
dscho Mar 21, 2025
9e70516
gvfs-helper: avoid collision check for packfiles
derrickstolee Jan 8, 2026
b05fff0
Add `--ref-format` option to scalar clone (port to `vfs-2.52.0`) (#832)
dscho Jan 8, 2026
c20f6d5
t5799: update cache-server methods for multiple instances
derrickstolee Jan 17, 2026
6273fc9
gvfs-helper: override cache server for prefetch
derrickstolee Jan 5, 2026
7327807
gvfs-helper: override cache server for get
derrickstolee Jan 5, 2026
1338aca
gvfs-helper: override cache server for post
derrickstolee Jan 5, 2026
83eb1e6
t5799: add test for all verb-specific cache-servers together
derrickstolee Jan 17, 2026
6f0f923
lib-gvfs-helper: create helper script for protocol tests
derrickstolee Jan 18, 2026
ffcd3cf
t579*: split t5799 into several parts
derrickstolee Jan 18, 2026
2ec43bd
gvfs-helper: prevent and/or give advice on repeated downloads to shar…
dscho Jan 9, 2026
51d9c4c
scalar: add --<verb>-cache-server-url options
derrickstolee Jan 23, 2026
ad6b63a
Restore previous errno after post command hook
tyrielv Feb 10, 2026
dfe98ee
gvfs-helper: add config to incrementally replace cache servers (#836)
derrickstolee Jan 22, 2026
a3a424b
t9210: differentiate origin and cache servers
derrickstolee Jan 28, 2026
db8fffa
Restore previous errno after post command hook (#860)
dscho Feb 10, 2026
457a1e1
unpack-trees: skip lstats for deleted VFS entries in checkout
Mar 6, 2026
f9f9804
scalar: add --<verb>-cache-server-url options (#849)
dscho Feb 11, 2026
fc1199e
worktree: conditionally allow worktree on VFS-enabled repos
Mar 26, 2026
09eb3e0
unpack-trees: skip lstats for deleted VFS entries in checkout (#865)
dscho Mar 26, 2026
7aaf1bd
gvfs-helper: send X-Session-Id headers
derrickstolee Mar 24, 2026
96c217c
gvfs-helper: create shared object cache if missing
derrickstolee Feb 12, 2026
2480412
worktree: conditionally allow worktree on VFS-enabled repos (#868)
mjcheetham Mar 27, 2026
7467920
gvfs: add gvfs.sessionKey config
derrickstolee Mar 24, 2026
241c201
gvfs-helper: create shared object cache if missing (#861)
mjcheetham Mar 27, 2026
a48ce17
gvfs: clear DIE_IF_CORRUPT in streaming incore fallback
tyrielv Mar 27, 2026
9f08eb5
gvfs-helper: emit X-Session-Id headers for requests (#862)
mjcheetham Mar 27, 2026
4b047ac
worktree remove: use GVFS_SUPPORTS_WORKTREES for skip-clean-check gate
tyrielv Mar 30, 2026
b8fe37e
gvfs: clear DIE_IF_CORRUPT in streaming incore fallback (#873)
dscho Mar 28, 2026
588e91e
ci: add new VFS for Git functional tests workflow
mjcheetham Mar 30, 2026
997c5dd
worktree remove: use gvfs_config_is_set for skip-clean-check gate (#875)
mjcheetham Apr 2, 2026
3ef7d12
azure-pipelines: add stub release pipeline for Azure
mjcheetham Apr 17, 2026
18b4c96
Add VFS for Git functional tests workflow (#874)
mjcheetham Apr 2, 2026
5289332
diff: add renameThreshold configuration option
tyrielv Apr 8, 2026
abd6ac2
azure-pipelines: add stub release pipeline for Azure (#886)
mjcheetham Apr 17, 2026
75ea3dd
blame: add blame.renames, blame.renameThreshold, blame.renameLimit
Apr 20, 2026
1968415
diff: add renameThreshold configuration option (#878)
dscho Apr 20, 2026
f1da780
azure-pipelines: add ESRP code signing
mjcheetham Apr 30, 2026
60d911e
azure-pipelines: allow overriding Git version
mjcheetham May 15, 2026
c54863b
azure-pipelines: build, sign and stage the Linux Debian package
dscho Apr 30, 2026
6c849d0
azure-pipelines: add signed macOS ARM64 releases
dscho Apr 30, 2026
376fb65
azure-pipelines: build, sign and stage the Windows installer
mjcheetham May 1, 2026
c6795be
azure-pipelines: enable on tag push, default ESRP and GitHub release on
dscho May 8, 2026
80edcbc
gvfs-helper: separate packfile extraction from indexing
derrickstolee Apr 7, 2026
e7f6d3b
release: binskim for Windows
mjcheetham May 21, 2026
5d5dcb4
gvfs-helper: run prefetch index-pack in parallel
derrickstolee Apr 7, 2026
8f2c448
blame: add blame.rename* configuration (#894)
dscho Apr 22, 2026
6dce414
release: suppress unfixable binskim findings
mjcheetham May 28, 2026
184a4d6
gvfs-helper: add gvfs.prefetchThreads config for parallel prefetch
derrickstolee Apr 21, 2026
3ecd903
Synchronize `vfs-2.54.0` with `vfs-2.53.0` (`git blame` changes) (#896)
dscho Apr 27, 2026
9a69fe5
binskim: add baseline
microsoft-github-policy-service[bot] May 29, 2026
7000cef
scalar: Install prefetch packfiles in parallel (#876)
dscho Apr 28, 2026
b602ad3
release-homebrew: add a hand-run script to replace the workflow
dscho Jul 7, 2026
9a110d6
checkout: preserve skip-worktree for virtual filesystem paths
tyrielv May 14, 2026
5fd4fe8
azure-pipelines: migrate installer release pipeline from GitHub Actio…
dscho May 19, 2026
40b58bb
release-vfsforgit: add hand-run script to supersede the workflow
dscho Jul 7, 2026
28b922c
checkout: preserve skip-worktree for virtual filesystem paths (forwar…
dscho May 27, 2026
f097bbe
.github: add release-winget.sh to open winget-pkgs PR
dscho Jul 7, 2026
3109aff
ci(vfs): install the GCC-compatible Rust target before building
dscho Jun 11, 2026
1902c40
trace2: tolerate failed timestamp formatting
derrickstolee Jul 13, 2026
1a057ff
Replace release workflows with scripts (v2.55 version) (#953)
dscho Jul 9, 2026
3760c89
reset --mixed: clear skip-worktree for all changed entries in VFS mode
tyrielv Jun 11, 2026
dd0b045
[2.55.0] fixup! gvfs: add global command pre and post hook procs (#956)
dscho Jul 15, 2026
8c65397
send-pack: add gvfs.negativeRefCheck to skip missing negatives
derrickstolee Jul 24, 2026
45330b9
reset --mixed: clear skip-worktree for all changed entries in VFS mod…
dscho Jul 23, 2026
f2235f4
scalar: add --[no-]prefetch option
derrickstolee Aug 19, 2026
1578839
odb: scan all sources' packfiles before loose objects
tyrielv Aug 7, 2026
b40b938
send-pack: add gvfs.negativeRefCheck to skip missing negatives (#967)
dscho Jul 27, 2026
aec46ac
gvfs-helper: add gvfs.postThreads config option
derrickstolee Aug 24, 2026
f4cc03f
scalar: request for commit via POST
derrickstolee Aug 20, 2026
7d83ca1
odb: scan all sources' packfiles before loose objects (#975)
dscho Aug 10, 2026
b6bbc22
http: factor reusable curl handle preparation
derrickstolee Sep 4, 2026
bc2fe16
scalar: add --[no-]prefetch (#979)
derrickstolee Aug 26, 2026
b978a96
gvfs-helper: parallelize POST object requests
derrickstolee Sep 4, 2026
87f7201
odb: warn when ignoring unusable alternates
dscho Sep 17, 2026
0e1942f
gvfs-helper: preserve POST failure handling in parallel mode
derrickstolee Sep 4, 2026
78da126
ci: avoid vcpkg telemetry contention during MSBuild
dscho Sep 18, 2026
84b71a5
t5798: test parallel POST object requests
derrickstolee Sep 4, 2026
2156aaa
rust: honor the active MinGW prefix when invoking Cargo
dscho Sep 18, 2026
fa0381c
t5798: test parallel POST failure handling
derrickstolee Sep 4, 2026
07147aa
cmake: default the Windows runtime prefix to UCRT64
dscho Sep 18, 2026
c81d6fd
gvfs-helper: parallelize POST requests (#980)
dscho Sep 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 106 additions & 0 deletions .azure-pipelines/esrp/sign.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
# Reusable step template for ESRP code signing via EsrpCodeSigning@6.
#
# For macOS, ESRP requires files to be submitted as a zip archive.
# Set 'useArchive: true' to automatically handle the
# copy → zip → sign → extract cycle. For Windows/Linux where ESRP
# can sign files directly in a folder, leave it as false (default).
#
parameters:
- name: displayName
type: string
- name: folderPath
type: string
- name: pattern
type: string
- name: inlineOperation
type: string
# When true, matching files are copied to a staging dir, zipped,
# signed, and extracted back to folderPath.
- name: useArchive
type: boolean
default: false
# ESRP connection parameters (defaults use pipeline variables)
- name: connectedServiceName
type: string
default: $(esrpAppConnectionName)
- name: appRegistrationClientId
type: string
default: $(esrpClientId)
- name: appRegistrationTenantId
type: string
default: $(esrpTenantId)
- name: authAkvName
type: string
default: $(esrpKeyVaultName)
- name: authSignCertName
type: string
default: $(esrpSignReqCertName)
- name: serviceEndpointUrl
type: string
default: $(esrpEndpointUrl)

steps:
- ${{ if eq(parameters.useArchive, true) }}:
- task: DeleteFiles@1
displayName: 'Clean staging dir for ${{ parameters.displayName }}'
inputs:
SourceFolder: '$(Agent.TempDirectory)/esrp-staging'
Contents: '*'
RemoveSourceFolder: true
- task: CopyFiles@2
displayName: 'Collect files for ${{ parameters.displayName }}'
inputs:
SourceFolder: '${{ parameters.folderPath }}'
Contents: '${{ parameters.pattern }}'
TargetFolder: '$(Agent.TempDirectory)/esrp-staging/contents'
- task: ArchiveFiles@2
displayName: 'Archive files for ${{ parameters.displayName }}'
inputs:
rootFolderOrFile: '$(Agent.TempDirectory)/esrp-staging/contents'
includeRootFolder: false
archiveType: zip
archiveFile: '$(Agent.TempDirectory)/esrp-staging/archive.zip'
- task: EsrpCodeSigning@6
displayName: '${{ parameters.displayName }}'
inputs:
connectedServiceName: '${{ parameters.connectedServiceName }}'
useMSIAuthentication: true
appRegistrationClientId: '${{ parameters.appRegistrationClientId }}'
appRegistrationTenantId: '${{ parameters.appRegistrationTenantId }}'
authAkvName: '${{ parameters.authAkvName }}'
authSignCertName: '${{ parameters.authSignCertName }}'
serviceEndpointUrl: '${{ parameters.serviceEndpointUrl }}'
folderPath: '$(Agent.TempDirectory)/esrp-staging'
pattern: 'archive.zip'
useMinimatch: true
signConfigType: inlineSignParams
inlineOperation: ${{ parameters.inlineOperation }}
- task: ExtractFiles@1
displayName: 'Extract signed files for ${{ parameters.displayName }}'
inputs:
archiveFilePatterns: '$(Agent.TempDirectory)/esrp-staging/archive.zip'
destinationFolder: '${{ parameters.folderPath }}'
overwriteExistingFiles: true
- task: DeleteFiles@1
displayName: 'Clean up staging dir for ${{ parameters.displayName }}'
condition: always()
inputs:
SourceFolder: '$(Agent.TempDirectory)/esrp-staging'
Contents: '*'
RemoveSourceFolder: true
- ${{ else }}:
- task: EsrpCodeSigning@6
displayName: '${{ parameters.displayName }}'
inputs:
connectedServiceName: '${{ parameters.connectedServiceName }}'
useMSIAuthentication: true
appRegistrationClientId: '${{ parameters.appRegistrationClientId }}'
appRegistrationTenantId: '${{ parameters.appRegistrationTenantId }}'
authAkvName: '${{ parameters.authAkvName }}'
authSignCertName: '${{ parameters.authSignCertName }}'
serviceEndpointUrl: '${{ parameters.serviceEndpointUrl }}'
folderPath: '${{ parameters.folderPath }}'
pattern: '${{ parameters.pattern }}'
useMinimatch: true
signConfigType: inlineSignParams
inlineOperation: ${{ parameters.inlineOperation }}
173 changes: 173 additions & 0 deletions .azure-pipelines/esrp/windows/esrpsign.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
#!/bin/bash
#
# Sign Windows files using the ESRP client (Authenticode).
# Usage: esrpsign.sh <file1> [file2 ...]
#
# Required environment variables:
# ESRP_TOOL - Path to ESRPClient.exe
# ESRP_AUTH - Path to the ESRP auth JSON file
# SYSTEM_ACCESSTOKEN - ADO system access token (OAuth bearer)
#
# Optional environment variables:
# ESRP_KEYCODE - Signing key code (default: CP-231522)
#
# The script generates the auth and input JSON files and sets the
# following ESRP client environment variables automatically:
# ESRP_AUTH_CONFIG - Path to the auth JSON file
# ESRP_POLICY_CONFIG - Path to the policy JSON file
# ESRP_SESSION_CONFIG - Not set; ESRP client defaults are used
#
set -euo pipefail

if [ $# -lt 1 ]; then
echo "usage: esrpsign.sh <file> [file ...]" >&2
exit 1
fi

if [ -z "${ESRP_TOOL:-}" ]; then
echo "error: ESRP_TOOL environment variable must be set" >&2
exit 1
fi
if [ -z "${ESRP_AUTH:-}" ]; then
echo "error: ESRP_AUTH environment variable must be set" >&2
exit 1
fi
if [ -z "${SYSTEM_ACCESSTOKEN:-}" ]; then
echo "error: SYSTEM_ACCESSTOKEN environment variable must be set" >&2
exit 1
fi

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
. "$SCRIPT_DIR/../../scripts/windows/utils.sh"

# Check for overriden key code, otherwise use default (Microsoft Third-Party/OSS)
ESRP_KEYCODE="${ESRP_KEYCODE:-CP-231522}"

# Create work dir and resolve its Windows path by cd-ing into it.
WORK_DIR="$(mktemp -d)"
WORK_DIR_WIN="$(cd "$WORK_DIR" && pwd -W | sed 's|/|\\|g')"

echo "==> ESRP signing tool: $ESRP_TOOL"
echo "==> Working directory: $WORK_DIR"

if [ ! -f "$ESRP_TOOL" ]; then
echo "error: ESRPClient.exe not found at $ESRP_TOOL" >&2
exit 1
fi

# Build the SignRequestFiles JSON array
echo "==> Preparing files for signing ($# file(s))..."
files_json=""
for file in "$@"; do
if [ ! -f "$file" ]; then
echo "error: file not found: $file" >&2
exit 1
fi

abs_path="$(cd "$(dirname "$file")" && pwd)/$(basename "$file")"
win_path="$(to_windows_path "$abs_path")"
# Escape backslashes for JSON
win_path_escaped="${win_path//\\/\\\\}"
echo " - $win_path"

if [ -n "$files_json" ]; then
files_json+=","
fi
files_json+="
{
\"SourceLocation\": \"$win_path_escaped\",
\"DestinationLocation\": \"$win_path_escaped\"
}"
done

# Generate the input JSON
input_json="$WORK_DIR/input.json"
output_json="$WORK_DIR/output.json"

echo "==> Generating input JSON: $input_json"
cat > "$input_json" <<-EOF
{
"Version": "1.0.0",
"SignBatches": [
{
"SourceLocationType": "UNC",
"DestinationLocationType": "UNC",
"SignRequestFiles": [$files_json
],
"SigningInfo": {
"Operations": [
{
"KeyCode": "$ESRP_KEYCODE",
"OperationCode": "SigntoolSign",
"ToolName": "sign",
"ToolVersion": "1.0",
"Parameters": {
"OpusName": "Microsoft",
"OpusInfo": "https://www.microsoft.com",
"FileDigest": "/fd SHA256",
"PageHash": "/NPH",
"TimeStamp": "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256"
}
},
{
"KeyCode": "$ESRP_KEYCODE",
"OperationCode": "SigntoolVerify",
"ToolName": "sign",
"ToolVersion": "1.0",
"Parameters": {}
}
]
}
}
]
}
EOF

# Generate policy JSON
echo "==> Generating policy JSON..."
policy_json="$WORK_DIR/policy.json"
cat > "$policy_json" <<-EOF
{
"Version": "1.0.0",
"Intent": "ProductRelease",
"ContentType": "Binaries",
"ContentOrigin": "1stParty",
"ProductState": "Current",
"Audience": "ExternalBroad"
}
EOF

# Use auth JSON from ESRP_AUTH
export ESRP_AUTH_CONFIG="$(to_windows_path "$ESRP_AUTH")"
export ESRP_POLICY_CONFIG="$WORK_DIR_WIN\\policy.json"

# The ADO system access token is referenced in the auth JSON via the environment
# variable - export this so the ESRP client can pick it up when it runs.
export SYSTEM_ACCESSTOKEN

# Print generated JSON files for debugging
echo "==> Auth JSON:"
cat "$ESRP_AUTH"
echo ""
echo "==> Policy JSON:"
cat "$policy_json"
echo ""
echo "==> Input JSON:"
cat "$input_json"
echo ""

# Sign the files
esrp_tool_win="$(to_windows_path "$ESRP_TOOL")"
input_json_win="$WORK_DIR_WIN\\input.json"
output_json_win="$WORK_DIR_WIN\\output.json"

echo "==> ESRP_AUTH_CONFIG=$ESRP_AUTH_CONFIG"
echo "==> ESRP_POLICY_CONFIG=$ESRP_POLICY_CONFIG"
echo "==> Running: $esrp_tool_win sign -i $input_json_win -o $output_json_win"
"$esrp_tool_win" sign \
-i "$input_json_win" \
-o "$output_json_win"

echo "==> Signing complete."
echo "==> Output JSON:"
cat "$output_json"
69 changes: 69 additions & 0 deletions .azure-pipelines/esrp/windows/setup.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
parameters:
- name: serviceConnectionName
type: string
- name: esrpClientId
type: string
- name: keyVaultName
type: string
- name: signCertName
type: string

steps:
- task: EsrpClientTool@5
name: esrpinstall
displayName: 'Install ESRP client'
- task: AzureCLI@2
displayName: 'Set up ESRP environment'
inputs:
azureSubscription: ${{ parameters.serviceConnectionName }}
addSpnToEnvironment: true
scriptType: ps
scriptLocation: inlineScript
inlineScript: |
# Resolve ESRP client tool path (passed via env to avoid PS subexpression issues)
$esrpTool = "$env:ESRPCLIENT_TOOLPATH\$env:ESRPCLIENT_TOOLNAME"
if (-not (Test-Path $esrpTool)) { Write-Error "ESRPClient.exe not found at $esrpTool"; exit 1 }
Write-Host "Found ESRP client: $esrpTool"
Write-Host "##vso[task.setvariable variable=ESRP_TOOL]$esrpTool"

# Derive the service connection GUID from the ENDPOINT_URL_* env vars
# that the agent emits for the bound connection. Filter out the
# built-in SystemVssConnection which is always present.
$scId = (Get-ChildItem env:ENDPOINT_URL_*).Name `
-replace '^ENDPOINT_URL_','' |
Where-Object { $_ -ne 'SYSTEMVSSCONNECTION' }
if (-not $scId) { Write-Error "Could not derive service connection GUID"; exit 1 }
Write-Host "Resolved service connection GUID: $scId"

# servicePrincipalId and tenantId are provided by addSpnToEnvironment
$authJson = @{
Version = "1.0.0"
AuthenticationType = "AAD_MSI_WIF"
EsrpClientId = "${{ parameters.esrpClientId }}"
ClientId = $env:servicePrincipalId
TenantId = $env:tenantId
AADAuthorityBaseUri = "https://login.microsoftonline.com/"
FederatedTokenData = @{
JobId = "$(System.JobId)"
PlanId = "$(System.PlanId)"
ProjectId = "$(System.TeamProjectId)"
Hub = "$(System.HostType)"
Uri = "$(System.CollectionUri)"
ServiceConnectionId = $scId
SystemAccessToken = "SYSTEM_ACCESSTOKEN"
}
RequestSigningCert = @{
GetCertFromKeyVault = $true
KeyVaultName = "${{ parameters.keyVaultName }}"
KeyVaultCertName = "${{ parameters.signCertName }}"
}
} | ConvertTo-Json -Depth 4

$authPath = "$(Agent.TempDirectory)\esrp-auth.json"
$authJson | Set-Content -Path $authPath -Encoding UTF8
Write-Host "Generated ESRP auth JSON: $authPath"
Write-Host "##vso[task.setvariable variable=ESRP_AUTH]$authPath"
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
ESRPCLIENT_TOOLPATH: $(esrpinstall.esrpclient.toolpath)
ESRPCLIENT_TOOLNAME: $(esrpinstall.esrpclient.toolname)
1 change: 1 addition & 0 deletions .azure-pipelines/patches/.gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
*.patch whitespace=-trailing-space,-blank-at-eof
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
diff --git a/installer/install.iss b/installer/install.iss
index 70787b7..137f660 100644
--- a/installer/install.iss
+++ b/installer/install.iss
@@ -65,7 +65,7 @@ SignTool=signtool
; Installer-related
AllowNoIcons=yes
AppName={#APP_NAME}
-AppPublisher=The Git Development Community
+AppPublisher=The Git Client Team at Microsoft
AppPublisherURL={#APP_URL}
AppSupportURL={#APP_CONTACT_URL}
AppVersion={#APP_VERSION}
Loading
Loading