Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
245 changes: 129 additions & 116 deletions .github/workflows/ci.yml
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

My formatter went to town, turn off whitespace

Original file line number Diff line number Diff line change
@@ -1,120 +1,133 @@
name: CI
on:
push:
branches: [master, release-*]
tags:
- '[0-9]+.[0-9]+.[0-9]+'
- '[0-9]+.[0-9]+.[0-9]+-*'
pull_request:
workflow_dispatch:
push:
branches: [master, release-*]
tags:
- "[0-9]+.[0-9]+.[0-9]+"
- "[0-9]+.[0-9]+.[0-9]+-*"
pull_request:
workflow_dispatch:
env:
DOTNET_NOLOGO: true
DOTNET_NOLOGO: true
jobs:
build:
name: Build
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v4.1.2
with:
fetch-depth: 0
- name: Install .NET SDK
uses: actions/setup-dotnet@v4.0.0
with:
dotnet-version: 9.0.x
- name: Build
run: dotnet build LibGit2Sharp.sln --configuration Release
- name: Upload packages
uses: actions/upload-artifact@v4.3.1
with:
name: NuGet packages
path: artifacts/package/
retention-days: 7
- name: Verify trimming compatibility
run: dotnet publish TrimmingTestApp

test:
name: Test / ${{ matrix.os }} / ${{ matrix.arch }} / ${{ matrix.tfm }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
arch: [ x64 ]
os: [ windows-2022, macos-14 ]
tfm: [ net472, net8.0, net9.0 ]
exclude:
- os: macos-14
tfm: net472
include:
- arch: arm64
os: macos-14
tfm: net8.0
- arch: arm64
os: macos-14
tfm: net9.0
fail-fast: false
steps:
- name: Checkout
uses: actions/checkout@v4.1.2
with:
fetch-depth: 0
- name: Install .NET SDK
uses: actions/setup-dotnet@v4.0.0
with:
dotnet-version: |
9.0.x
8.0.x
- name: Run ${{ matrix.tfm }} tests
run: dotnet test LibGit2Sharp.sln --configuration Release --framework ${{ matrix.tfm }} --logger "GitHubActions" /p:ExtraDefine=LEAKS_IDENTIFYING
test-linux:
name: Test / ${{ matrix.distro }} / ${{ matrix.arch }} / ${{ matrix.tfm }}
runs-on: ${{ matrix.runnerImage }}
strategy:
matrix:
arch: [ amd64, arm64 ]
distro: [ alpine.3.17, alpine.3.18, alpine.3.19, alpine.3.20, centos.stream.9, debian.12, fedora.40, ubuntu.20.04, ubuntu.22.04, ubuntu.24.04 ]
sdk: [ '8.0', '9.0' ]
exclude:
- distro: alpine.3.17
sdk: '9.0'
- distro: alpine.3.18
sdk: '9.0'
- distro: alpine.3.19
sdk: '9.0'
include:
- sdk: '8.0'
tfm: net8.0
- sdk: '9.0'
tfm: net9.0
- arch: amd64
runnerImage: ubuntu-22.04
- arch: arm64
runnerImage: ubuntu-22.04-arm
fail-fast: false
steps:
- name: Checkout
uses: actions/checkout@v4.1.2
with:
fetch-depth: 0
- name: Run ${{ matrix.tfm }} tests
run: |
git_command="git config --global --add safe.directory /app"
test_command="dotnet test LibGit2Sharp.sln --configuration Release -p:TargetFrameworks=${{ matrix.tfm }} --logger "GitHubActions" -p:ExtraDefine=LEAKS_IDENTIFYING"
docker run -t --rm --platform linux/${{ matrix.arch }} -v "$PWD:/app" -e OPENSSL_ENABLE_SHA1_SIGNATURES=1 gittools/build-images:${{ matrix.distro }}-sdk-${{ matrix.sdk }} sh -c "$git_command && $test_command"

nuget-push:
name: Octopus NuGet Push
needs: [build, test, test-linux]
# && github.ref == 'refs/heads/octopus/master'
if: github.actor != 'dependabot[bot]' && github.actor != 'dependabot-preview[bot]' && github.event_name != 'schedule'
runs-on: ubuntu-22.04
steps:
- uses: actions/download-artifact@v4
with:
path: staging
- name: Push package to feed 🐙
id: push-feed
shell: bash
env:
FEED_API_KEY: ${{ secrets.FEED_API_KEY }}
FEED_SOURCE: ${{ secrets.FEED_SOURCE }}
run: dotnet nuget push staging/**/*.nupkg --api-key "$FEED_API_KEY" --source "$FEED_SOURCE"
build:
name: Build
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Install .NET SDK
uses: actions/setup-dotnet@v5
with:
dotnet-version: 9.0.x
- name: Compute version suffix for branch builds
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
id: version
run: |
# Sanitize branch name: lowercase, replace non-alphanumeric with hyphen, trim to 20 chars
BRANCH="${GITHUB_HEAD_REF:-${GITHUB_REF_NAME}}"
SAFE_BRANCH=$(echo "$BRANCH" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]/-/g' | sed 's/--*/-/g' | sed 's/^-//' | sed 's/-$//' | cut -c1-20)
echo "override=${SAFE_BRANCH}.${{ github.run_number }}" >> "$GITHUB_OUTPUT"
- name: Build
run: dotnet build LibGit2Sharp.sln --configuration Release ${{ steps.version.outputs.override && format('/p:MinVerDefaultPreReleaseIdentifiers="{0}"', steps.version.outputs.override) || '' }}
- name: Upload packages
uses: actions/upload-artifact@v7
with:
name: NuGet packages
path: artifacts/package/
retention-days: 7
- name: Verify trimming compatibility
run: dotnet publish TrimmingTestApp

test:

Check warning

Code scanning / CodeQL

Workflow does not contain permissions Medium

Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {contents: read}
Comment on lines +14 to +44
name: Test / ${{ matrix.os }} / ${{ matrix.arch }} / ${{ matrix.tfm }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
arch: [x64]
os: [windows-2022, macos-14]
tfm: [net472, net8.0, net9.0]
exclude:
- os: macos-14
tfm: net472
include:
- arch: arm64
os: macos-14
tfm: net8.0
- arch: arm64
os: macos-14
tfm: net9.0
fail-fast: false
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Install .NET SDK
uses: actions/setup-dotnet@v5
with:
dotnet-version: |
9.0.x
8.0.x
- name: Run ${{ matrix.tfm }} tests
run: dotnet test LibGit2Sharp.sln --configuration Release --framework ${{ matrix.tfm }} --logger "GitHubActions" /p:ExtraDefine=LEAKS_IDENTIFYING
test-linux:

Check warning

Code scanning / CodeQL

Workflow does not contain permissions Medium

Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {contents: read}
Comment on lines +45 to +76
name: Test / ${{ matrix.distro }} / ${{ matrix.arch }} / ${{ matrix.tfm }}
runs-on: ${{ matrix.runnerImage }}
strategy:
matrix:
arch: [amd64, arm64]
distro:
[
alpine.3.20,
alpine.3.21,
alpine.3.22,
centos.stream.9,
debian.12,
fedora.41,
fedora.42,
ubuntu.22.04,
ubuntu.24.04,
Comment on lines +84 to +92
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Updated to remove older distros that are out of support

]
sdk: ["8.0", "9.0"]
include:
- sdk: "8.0"
tfm: net8.0
- sdk: "9.0"
tfm: net9.0
- arch: amd64
runnerImage: ubuntu-22.04
- arch: arm64
runnerImage: ubuntu-22.04-arm
fail-fast: false
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Run ${{ matrix.tfm }} tests
run: |
git_command="git config --global --add safe.directory /app"
test_command="dotnet test LibGit2Sharp.sln --configuration Release -p:TargetFrameworks=${{ matrix.tfm }} --logger "GitHubActions" -p:ExtraDefine=LEAKS_IDENTIFYING"
docker run -t --rm --platform linux/${{ matrix.arch }} -v "$PWD:/app" -w /app -e OPENSSL_ENABLE_SHA1_SIGNATURES=1 gittools/build-images:${{ matrix.distro }}-sdk-${{ matrix.sdk }} sh -c "$git_command && $test_command"

nuget-push:

Check warning

Code scanning / CodeQL

Workflow does not contain permissions Medium

Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {contents: read}
Comment on lines +77 to +116
name: Octopus NuGet Push
needs: [build, test, test-linux]
# && github.ref == 'refs/heads/octopus/master'
if: github.actor != 'dependabot[bot]' && github.actor != 'dependabot-preview[bot]' && github.event_name != 'schedule'
runs-on: ubuntu-22.04
steps:
- uses: actions/download-artifact@v8

with:
path: staging
- name: Push package to feed 🐙
id: push-feed
shell: bash
env:
FEED_API_KEY: ${{ secrets.FEED_API_KEY }}
FEED_SOURCE: ${{ secrets.FEED_SOURCE }}
run: dotnet nuget push staging/**/*.nupkg --api-key "$FEED_API_KEY" --source "$FEED_SOURCE" --skip-duplicate

Check warning

Code scanning / CodeQL

Workflow does not contain permissions Medium

Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {}
Comment on lines +117 to +133
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ _ReSharper*/
*.swp
*.DotSettings

.idea/
_NCrunch_LibGit2Sharp/
artifacts/
worktree.playlist
4 changes: 3 additions & 1 deletion .idea/.idea.LibGit2Sharp/.idea/indexLayout.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions LibGit2Sharp.Tests/GlobalSettingsFixture.cs
Original file line number Diff line number Diff line change
Expand Up @@ -90,17 +90,17 @@ public void SetExtensions()
var extensions = GlobalSettings.GetExtensions();

// Assert that "noop" is supported by default
Assert.Equal(new[] { "noop", "objectformat", "worktreeconfig" }, extensions);
Assert.Equal(new[] { "noop", "objectformat", "preciousobjects", "worktreeconfig" }, extensions);

// Disable "noop" extensions
GlobalSettings.SetExtensions("!noop");
extensions = GlobalSettings.GetExtensions();
Assert.Equal(new[] { "objectformat", "worktreeconfig" }, extensions);
Assert.Equal(new[] { "objectformat", "preciousobjects", "worktreeconfig" }, extensions);

// Enable two new extensions (it will reset the configuration and "noop" will be enabled)
GlobalSettings.SetExtensions("partialclone", "newext");
extensions = GlobalSettings.GetExtensions();
Assert.Equal(new[] { "newext", "noop", "objectformat", "partialclone", "worktreeconfig" }, extensions);
Assert.Equal(new[] { "newext", "noop", "objectformat", "partialclone", "preciousobjects", "worktreeconfig" }, extensions);
}

[Fact]
Expand Down
2 changes: 1 addition & 1 deletion LibGit2Sharp.Tests/LibGit2Sharp.Tests.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks Condition="'$(TargetFrameworks)'==''">net472;net6.0;net8.0;net9.0</TargetFrameworks>
<TargetFrameworks Condition="'$(TargetFrameworks)'==''">net472;net8.0;net9.0</TargetFrameworks>
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Removes out of support net6.0

</PropertyGroup>

<ItemGroup>
Expand Down
3 changes: 3 additions & 0 deletions LibGit2Sharp/Core/GitBlame.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,15 @@ internal unsafe struct git_blame_hunk
public git_oid final_commit_id;
public UIntPtr final_start_line_number;
public git_signature* final_signature;
public git_signature* final_committer;

public git_oid orig_commit_id;
public char* orig_path;
public UIntPtr orig_start_line_number;
public git_signature* orig_signature;
public git_signature* orig_committer;

public char* summary;
public byte boundary;
}

Expand Down
12 changes: 11 additions & 1 deletion LibGit2Sharp/Core/GitCertificateSsh.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Runtime.InteropServices;
using System;
using System.Runtime.InteropServices;

namespace LibGit2Sharp.Core
{
Expand All @@ -17,5 +18,14 @@ internal unsafe struct git_certificate_ssh
/// The SHA1 hash (if appropriate)
/// </summary>
public unsafe fixed byte HashSHA1[20];

/// <summary>
/// The SHA256 hash (if appropriate)
/// </summary>
public unsafe fixed byte HashSHA256[32];

public int raw_type;
public byte* hostkey;
public UIntPtr hostkey_len;
}
}
1 change: 1 addition & 0 deletions LibGit2Sharp/Core/GitCertificateSshType.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@ internal enum GitCertificateSshType
{
MD5 = (1 << 0),
SHA1 = (1 << 1),
SHA256 = (1 << 2),
}
}
25 changes: 18 additions & 7 deletions LibGit2Sharp/Core/GitCheckoutOpts.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,9 @@ namespace LibGit2Sharp.Core
internal enum CheckoutStrategy
{
/// <summary>
/// Default is a dry run, no actual updates.
/// Allow safe updates that cannot overwrite uncommitted data.
/// </summary>
GIT_CHECKOUT_NONE = 0,

/// <summary>
/// Allow safe updates that cannot overwrite uncommited data.
/// </summary>
GIT_CHECKOUT_SAFE = (1 << 0),
GIT_CHECKOUT_SAFE = 0,

/// <summary>
/// Allow update of entries in working dir that are modified from HEAD.
Expand Down Expand Up @@ -105,6 +100,22 @@ internal enum CheckoutStrategy
/// </summary>
GIT_CHECKOUT_DONT_WRITE_INDEX = (1 << 23),

/// <summary>
/// Perform a dry run, reporting what would be done but without
/// actually making changes in the working directory or the index.
/// </summary>
GIT_CHECKOUT_DRY_RUN = (1 << 24),

/// <summary>
/// Include common ancestor data in zdiff3 format for conflicts.
/// </summary>
GIT_CHECKOUT_CONFLICT_STYLE_ZDIFF3 = (1 << 25),

/// <summary>
/// Do not do a checkout and do not fire callbacks.
/// </summary>
GIT_CHECKOUT_NONE = (1 << 30),

// THE FOLLOWING OPTIONS ARE NOT YET IMPLEMENTED

/// <summary>
Expand Down
1 change: 0 additions & 1 deletion LibGit2Sharp/Core/GitConfigEntry.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,5 @@ internal unsafe struct GitConfigEntry
public char* origin_path;
public uint include_depth;
public uint level;
public void* freePtr;
}
}
1 change: 1 addition & 0 deletions LibGit2Sharp/Core/GitDiff.cs
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,7 @@ internal class GitDiffOptions : IDisposable

public uint ContextLines;
public uint InterhunkLines;
public uint OidType;
public ushort IdAbbrev;
public long MaxSize;
public IntPtr OldPrefixString;
Expand Down
Loading
Loading