diff --git a/.azure-pipelines/release.yml b/.azure-pipelines/release.yml
index f020c676fe..a957609d89 100644
--- a/.azure-pipelines/release.yml
+++ b/.azure-pipelines/release.yml
@@ -301,6 +301,11 @@ extends:
targetType: inline
script: |
echo "##vso[task.setvariable variable=version;isReadOnly=true]$(cat ./VERSION | sed -E 's/.[0-9]+$//')"
+ - task: UseDotNet@2
+ displayName: 'Use .NET 8 SDK (ESRP dependency)'
+ inputs:
+ packageType: sdk
+ version: '8.x'
- task: UseDotNet@2
displayName: 'Use .NET 10 SDK'
inputs:
@@ -571,6 +576,11 @@ extends:
targetType: inline
script: |
echo "##vso[task.setvariable variable=version;isReadOnly=true]$(cat ./VERSION | sed -E 's/.[0-9]+$//')"
+ - task: UseDotNet@2
+ displayName: 'Use .NET 8 SDK (ESRP dependency)'
+ inputs:
+ packageType: sdk
+ version: '8.x'
- task: UseDotNet@2
displayName: 'Use .NET 10 SDK'
inputs:
@@ -862,9 +872,13 @@ extends:
dependsOn: release_validation
condition: and(succeeded(), eq('${{ parameters.nuget }}', true))
pool:
+ # Run on Windows so the underlying NuGetCommand@2 task can use the
+ # native nuget.exe. On Ubuntu 24.04+ the legacy NuGet task fails
+ # because Mono is no longer available.
+ # See https://aka.ms/nuget-task-mono.
name: GitClientPME-1ESHostedPool-intel-pc
- image: ubuntu-x86_64-ado1es
- os: linux
+ image: win-x86_64-ado1es
+ os: windows
variables:
version: $[dependencies.release_validation.outputs['version.value']]
templateContext:
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
new file mode 100644
index 0000000000..39bbd2681d
--- /dev/null
+++ b/.devcontainer/devcontainer.json
@@ -0,0 +1,4 @@
+{
+ "image": "mcr.microsoft.com/devcontainers/universal:2",
+ "features": {}
+}
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index d2b88817b4..72d5418879 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -22,10 +22,10 @@ jobs:
language: [ 'csharp' ]
steps:
- - uses: actions/checkout@v6
+ - uses: actions/checkout@v7
- name: Setup .NET
- uses: actions/setup-dotnet@v5.1.0
+ uses: actions/setup-dotnet@v5.4.0
with:
dotnet-version: 10.0.x
diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml
index a77a8d66d3..9997aa42ae 100644
--- a/.github/workflows/continuous-integration.yml
+++ b/.github/workflows/continuous-integration.yml
@@ -25,10 +25,10 @@ jobs:
os: windows-11-arm
steps:
- - uses: actions/checkout@v6
+ - uses: actions/checkout@v7
- name: Setup .NET
- uses: actions/setup-dotnet@v5.1.0
+ uses: actions/setup-dotnet@v5.4.0
with:
dotnet-version: 10.0.x
@@ -82,10 +82,10 @@ jobs:
runtime: [ linux-x64, linux-arm64, linux-arm ]
steps:
- - uses: actions/checkout@v6
+ - uses: actions/checkout@v7
- name: Setup .NET
- uses: actions/setup-dotnet@v5.1.0
+ uses: actions/setup-dotnet@v5.4.0
with:
dotnet-version: 10.0.x
@@ -126,10 +126,10 @@ jobs:
runtime: [ osx-x64, osx-arm64 ]
steps:
- - uses: actions/checkout@v6
+ - uses: actions/checkout@v7
- name: Setup .NET
- uses: actions/setup-dotnet@v5.1.0
+ uses: actions/setup-dotnet@v5.4.0
with:
dotnet-version: 10.0.x
diff --git a/.github/workflows/lint-docs.yml b/.github/workflows/lint-docs.yml
index bfbd2bbfaf..ff64b9bcd2 100644
--- a/.github/workflows/lint-docs.yml
+++ b/.github/workflows/lint-docs.yml
@@ -18,7 +18,7 @@ jobs:
name: Lint markdown files
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v6
+ - uses: actions/checkout@v7
- uses: DavidAnson/markdownlint-cli2-action@ce4853d43830c74c1753b39f3cf40f71c2031eb9
with:
@@ -30,7 +30,7 @@ jobs:
name: Check for broken links
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v6
+ - uses: actions/checkout@v7
- name: Run link checker
# For any troubleshooting, see:
diff --git a/.github/workflows/maintainer-absence.yml b/.github/workflows/maintainer-absence.yml
index 20e6694e79..3de79e6a12 100644
--- a/.github/workflows/maintainer-absence.yml
+++ b/.github/workflows/maintainer-absence.yml
@@ -18,7 +18,7 @@ jobs:
name: create-issue
runs-on: ubuntu-latest
steps:
- - uses: actions/github-script@v8
+ - uses: actions/github-script@v9
with:
script: |
const startDate = new Date('${{ github.event.inputs.startDate }}');
diff --git a/.github/workflows/validate-install-from-source.yml b/.github/workflows/validate-install-from-source.yml
index beecc9ae19..dca6f56b46 100644
--- a/.github/workflows/validate-install-from-source.yml
+++ b/.github/workflows/validate-install-from-source.yml
@@ -5,6 +5,9 @@ on:
push:
branches:
- main
+ pull_request:
+ branches:
+ - main
jobs:
docker:
@@ -15,7 +18,7 @@ jobs:
matrix:
vector:
- image: ubuntu
- - image: debian:bullseye
+ - image: debian:bookworm
- image: fedora
# Centos no longer officially maintains images on Docker Hub. However,
# tgagor is a contributor who pushes updated images weekly, which should
@@ -42,7 +45,7 @@ jobs:
GNUPGHOME=/root/.gnupg tdnf install tar -y # needed for `actions/checkout`
fi
- - uses: actions/checkout@v6
+ - uses: actions/checkout@v7
- run: |
sh "${GITHUB_WORKSPACE}/src/linux/Packaging.Linux/install-from-source.sh" -y
diff --git a/.github/workflows/validate-install-homebrew.yml b/.github/workflows/validate-install-homebrew.yml
new file mode 100644
index 0000000000..1c02e0c8c1
--- /dev/null
+++ b/.github/workflows/validate-install-homebrew.yml
@@ -0,0 +1,43 @@
+name: validate-install-homebrew
+
+on:
+ workflow_dispatch:
+ push:
+ branches:
+ - main
+ pull_request:
+ branches:
+ - main
+
+jobs:
+ homebrew:
+ name: ${{ matrix.os }}
+ runs-on: ${{ matrix.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - os: macos-latest
+ arch: arm64
+ - os: macos-14
+ arch: arm64
+
+ steps:
+ - uses: actions/checkout@v7
+
+ - name: Install via Homebrew
+ run: brew install --cask git-credential-manager
+
+ - name: Verify installation
+ run: git-credential-manager --version || exit 1
+
+ - name: Uninstall via Homebrew
+ run: brew uninstall --cask git-credential-manager
+
+ - name: Verify uninstallation
+ run: |
+ if command -v git-credential-manager &>/dev/null; then
+ echo "ERROR: git-credential-manager still found after uninstall"
+ exit 1
+ fi
+ echo "git-credential-manager successfully removed"
diff --git a/Directory.Packages.props b/Directory.Packages.props
index a836e1bcaf..d1e002d856 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -25,6 +25,7 @@
+
diff --git a/README.md b/README.md
index b9dcff451c..f7ffa9df83 100644
--- a/README.md
+++ b/README.md
@@ -1,34 +1,34 @@
-# Git Credential Manager
+# pamela
[![Build Status][build-status-badge]][workflow-status]
---
-[Git Credential Manager][gcm] (GCM) is a secure
+[pamela][gcm] is a secure
[Git credential helper][git-credential-helper] built on [.NET][dotnet] that runs
on Windows, macOS, and Linux. It aims to provide a consistent and secure
authentication experience, including multi-factor auth, to every major source
control hosting service and platform.
-GCM supports (in alphabetical order) [Azure DevOps][azure-devops], Azure DevOps
+pamela supports (in alphabetical order) [Azure DevOps][azure-devops], Azure DevOps
Server (formerly Team Foundation Server), Bitbucket, GitHub, and GitLab.
Compare to Git's [built-in credential helpers][git-tools-credential-storage]
(Windows: wincred, macOS: osxkeychain, Linux: gnome-keyring/libsecret), which
provide single-factor authentication support for username/password only.
-GCM replaces both the .NET Framework-based
+pamela replaces both the .NET Framework-based
[Git Credential Manager for Windows][gcm-for-windows] and the Java-based
[Git Credential Manager for Mac and Linux][gcm-for-mac-and-linux].
## Install
-See the [installation instructions][install] for the current version of GCM for
+See the [installation instructions][install] for the current version of pamela for
install options for your operating system.
## Current status
-Git Credential Manager is currently available for Windows, macOS, and Linux\*.
-GCM only works with HTTP(S) remotes; you can still use Git with SSH:
+pamela is currently available for Windows, macOS, and Linux\*.
+pamela only works with HTTP(S) remotes; you can still use Git with SSH:
- [Azure DevOps SSH][azure-devops-ssh]
- [GitHub SSH][github-ssh]
@@ -50,37 +50,37 @@ Proxy support|✓|✓|✓
`arm64` support|best effort|✓|✓
`armhf` support|_N/A_|_N/A_|✓
-(\*) GCM guarantees support only for [the Linux distributions that are officially
+(\*) pamela guarantees support only for [the Linux distributions that are officially
supported by dotnet][dotnet-distributions].
## Supported Git versions
-Git Credential Manager tries to be compatible with the broadest set of Git
+pamela tries to be compatible with the broadest set of Git
versions (within reason). However there are some known problematic releases of
Git that are not compatible.
- Git 1.x
- The initial major version of Git is not supported or tested with GCM.
+ The initial major version of Git is not supported or tested with pamela.
- Git 2.26.2
This version of Git introduced a breaking change with parsing credential
- configuration that GCM relies on. This issue was fixed in commit
+ configuration that pamela relies on. This issue was fixed in commit
[`12294990`][gcm-commit-12294990] of the Git project, and released in Git
2.27.0.
## How to use
-Once it's installed and configured, Git Credential Manager is called implicitly
-by Git. You don't have to do anything special, and GCM isn't intended to be
+Once it's installed and configured, pamela is called implicitly
+by Git. You don't have to do anything special, and pamela isn't intended to be
called directly by the user. For example, when pushing (`git push`) to
[Azure DevOps][azure-devops], [Bitbucket][bitbucket], or [GitHub][github], a
window will automatically open and walk you through the sign-in process. (This
process will look slightly different for each Git host, and even in some cases,
whether you've connected to an on-premises or cloud-hosted Git host.) Later Git
commands in the same repository will re-use existing credentials or tokens that
-GCM has stored for as long as they're valid.
+pamela has stored for as long as they're valid.
Read full command line usage [here][gcm-usage].
@@ -98,7 +98,7 @@ See the [documentation index][docs-index] for links to additional resources.
## Future features
-Curious about what's coming next in the GCM project? Take a look at the [project
+Curious about what's coming next in the pamela project? Take a look at the [project
roadmap][roadmap]! You can find more details about the construction of the
roadmap and how to interpret it [here][roadmap-announcement].
diff --git a/VERSION b/VERSION
index 3646086447..0ab902011a 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.7.3.0
+2.8.0.0
diff --git a/docs/credstores.md b/docs/credstores.md
index ca76f56926..4d54059e60 100644
--- a/docs/credstores.md
+++ b/docs/credstores.md
@@ -277,7 +277,7 @@ Note that you'll want to ensure that another credential helper is placed before
GCM in the `credential.helper` Git configuration or else you will be prompted to
enter your credentials every time you interact with a remote repository.
-[access-windows-credential-manager]: https://support.microsoft.com/en-us/windows/accessing-credential-manager-1b5c916a-6a16-889f-8581-fc16e8165ac0
+[access-windows-credential-manager]: https://support.microsoft.com/en-US/Windows/Security/credential-manager-in-windows
[aws-cloudshell]: https://aws.amazon.com/cloudshell/
[azure-cloudshell]: https://docs.microsoft.com/azure/cloud-shell/overview
[cmdkey]: https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/cmdkey
diff --git a/docs/github-apideprecation.md b/docs/github-apideprecation.md
index 6a54a7a401..7075085d29 100644
--- a/docs/github-apideprecation.md
+++ b/docs/github-apideprecation.md
@@ -143,6 +143,6 @@ the new token-based authentication requirements **DO NOT** apply to GHES:
[windows-cli-save-pat-image]: img/windows-cli-save-pat.png
[vs-2019]: https://docs.microsoft.com/en-us/visualstudio/install/update-visual-studio?view=vs-2019
[vs-2017]: https://docs.microsoft.com/en-us/visualstudio/install/update-visual-studio?view=vs-2017
-[windows-credential-manager]: https://support.microsoft.com/en-us/windows/accessing-credential-manager-1b5c916a-6a16-889f-8581-fc16e8165ac0
+[windows-credential-manager]: https://support.microsoft.com/en-US/Windows/Security/credential-manager-in-windows
[windows-gui-add-pat-image]: img/windows-gui-add-pat.png
[windows-gui-credentials-image]: img/windows-gui-credentials.png
diff --git a/docs/install.md b/docs/install.md
index 9fa7da4aca..86ead9557a 100644
--- a/docs/install.md
+++ b/docs/install.md
@@ -210,7 +210,7 @@ the preferred install method for Linux because you can use it to install on any
distribution][dotnet-supported-distributions]. You
can also use this method on macOS if you so choose.
-**Note:** Make sure you have installed [version 8.0 of the .NET
+**Note:** Make sure you have installed [version 10.0 of the .NET
SDK][dotnet-install] before attempting to run the following `dotnet tool`
commands. After installing, you will also need to follow the output instructions
to add the tools directory to your `PATH`.
diff --git a/global.json b/global.json
index 5cc6b13a63..d9483139eb 100644
--- a/global.json
+++ b/global.json
@@ -1,7 +1,7 @@
{
"sdk": {
"rollForward": "latestMajor",
- "version": "8.0"
+ "version": "8.0.100"
}
}
diff --git a/src/linux/Packaging.Linux/install-from-source.sh b/src/linux/Packaging.Linux/install-from-source.sh
index 888a23597f..1337b75273 100755
--- a/src/linux/Packaging.Linux/install-from-source.sh
+++ b/src/linux/Packaging.Linux/install-from-source.sh
@@ -91,7 +91,7 @@ ensure_dotnet_installed() {
if [ -z "$(verify_existing_dotnet_installation)" ]; then
curl -LO https://dot.net/v1/dotnet-install.sh
chmod +x ./dotnet-install.sh
- bash -c "./dotnet-install.sh --channel 8.0"
+ bash -c "./dotnet-install.sh --channel 10.0"
# Since we have to run the dotnet install script with bash, dotnet isn't
# added to the process PATH, so we manually add it here.
@@ -103,10 +103,10 @@ ensure_dotnet_installed() {
verify_existing_dotnet_installation() {
# Get initial pieces of installed sdk version(s).
- sdks=$(dotnet --list-sdks | cut -c 1-3)
+ sdks=$(dotnet --list-sdks | cut -d' ' -f1 | cut -d. -f1,2)
# If we have a supported version installed, return.
- supported_dotnet_versions="8.0"
+ supported_dotnet_versions="10.0"
for v in $supported_dotnet_versions; do
if [ $(echo $sdks | grep "$v") ]; then
echo $sdks
@@ -185,7 +185,7 @@ case "$distribution" in
$sudo_cmd apt update
$sudo_cmd apt install apt-transport-https -y
$sudo_cmd apt update
- $sudo_cmd apt install dotnet-sdk-8.0 dpkg-dev -y
+ $sudo_cmd apt install dotnet-sdk-10.0 dpkg-dev -y
fi
fi
;;
@@ -220,7 +220,7 @@ case "$distribution" in
ensure_dotnet_installed
;;
- arch)
+ arch | cachyos)
print_unsupported_distro "WARNING" "$distribution"
# --noconfirm required when running from container
diff --git a/src/osx/Installer.Mac/notarize.sh b/src/osx/Installer.Mac/notarize.sh
index 9315d688af..f3aa55d00e 100755
--- a/src/osx/Installer.Mac/notarize.sh
+++ b/src/osx/Installer.Mac/notarize.sh
@@ -1,4 +1,8 @@
#!/bin/bash
+die () {
+ echo "$*" >&2
+ exit 1
+}
for i in "$@"
do
diff --git a/src/shared/Atlassian.Bitbucket/BitbucketResources.resx b/src/shared/Atlassian.Bitbucket/BitbucketResources.resx
index d7e6058e85..165edd0c8a 100644
--- a/src/shared/Atlassian.Bitbucket/BitbucketResources.resx
+++ b/src/shared/Atlassian.Bitbucket/BitbucketResources.resx
@@ -22,10 +22,20 @@