feat: add internal reproducible git checksum builtin (#203)

Adds a new rego builtin `attest.internals.reproducible_git_checksum`.
This is needed for verifying DOI provenance, see
https://github.com/docker/doi-image-policy/blob/main/slsa.md#doi-build-reproducible-git-checksum.

We use https://github.com/go-git/go-git for as much of this as possible,
but it doesn't support the actual archive operation, so we shell out to
`git` for that.

There is some similar unexported code in bashbrew, and we should
probably be using the same code in the build process as we are here.
I'll create a follow-up ticket to sort that out.
This commit is contained in:
Jonny Stoten
2024-10-22 14:30:27 +01:00
committed by GitHub
parent 3cf2d929f7
commit a078fba81d
7 changed files with 468 additions and 30 deletions

42
internal/git/git_test.go Normal file
View File

@@ -0,0 +1,42 @@
/*
Copyright Docker attest authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package git
import (
"context"
"os"
"os/exec"
"testing"
"github.com/stretchr/testify/require"
)
func TestArchiveWithInvalidGitCommand(t *testing.T) {
originalGitCommand := GitCommand
GitCommand = "invalid-git-command"
defer func() { GitCommand = originalGitCommand }()
tempDir, err := os.MkdirTemp("", "gitrepo")
if err != nil {
t.Fatalf("failed to create temp dir: %v", err)
}
defer os.RemoveAll(tempDir)
ctx := context.Background()
_, err = Archive(ctx, tempDir, "")
require.ErrorIs(t, err, exec.ErrNotFound)
}